我在 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;
和size = 0;
是多余的,原因有两个:
delete nullptr;
非常安全,它什么也没做。- 如果对象被销毁并且内存被释放,我不应该担心设置
bar
为0nullptr
和size
0 的安全性。
这些理由正确吗?这些陈述真的是多余的吗?如果是这样,为什么人们继续使用和建议它们?我希望看到一些可以通过保持这个约定来解决的潜在问题。