delete(),在C ++中自动执行吗?
如果没有,使用delete()在C ++中做什么更好的方法?
Foo* p = new Foo();
memset(p, 0, sizeof(Foo));
delete p;</code>
Foo* p = new Foo();
p->~Foo();
memset(p, 0, sizeof(Foo));
::operator delete(p);</code>
</醇>
没有
</醇>
一般来说,这在C ++中是错误的:
问题是
delete p
将调用类的析构函数,如果该析构函数是非平凡的,则可能需要访问该类的成员以释放相关资源,但这些成员已被覆盖
memset
。
等效的是显式调用析构函数,调用
memset
,然后使用
operator delete
释放记忆:
的
但
</强>
如果可以看到没有人再次访问内存,则允许编译器优化memset,因此CERT建议不是很好。