以下の例のようなコードが C++ で多く見られますが、これは通常、規則として推奨されています。
class Foo
{
public:
Foo()
{
bar = new int[100];
size = 100;
}
// ... copy/assignment stuff ...
~Foo()
{
if (bar) // <--- needed?
{
delete[] bar;
bar = nullptr; // <--- needed?
}
size = 0; // <--- needed?
}
private:
int* bar;
int size;
};
私にとって、 、if (bar) { ... }
、bar = nullptr;
およびの 3 つのステートメントは、size = 0;
次の 2 つの理由で冗長です。
delete nullptr;
完全に安全で、何もしません。- オブジェクトが破棄されてメモリが解放された場合、0に設定
bar
する安全性について心配する必要はありません。nullptr
size
これらの正当化は正しいですか?これらのステートメントは本当に冗長ですか? もしそうなら、なぜ人々はそれらを使用し、提案し続けるのですか? この慣習を守ることで解決できる潜在的な問題をいくつか見てみたいと思います。