我看到很多代码,例如下面的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
,以nullptr
和size
为0。这些理由正确吗?这些说法真的多余吗?如果是这样,为什么人们会继续使用并提出建议?我希望看到一些可能的问题,可以通过保留此约定来解决。
没错,这些并不需要,而且某些编译器仍会对其进行优化。
但是,人们通常这样做的原因是为了帮助发现问题。例如,假设您不将指针设置为null。该对象已被破坏,但是随后您错误地尝试访问(曾经是)指针。由于运行时可能不会清除它,因此您仍然会在此处看到有效的内容。这仅从调试中有价值,并且仍然是未定义的行为,但有时会有所回报。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句