我正在开发一种工具,例如内存泄漏检测器。我可以跟踪新的展示位置,但如何跟踪展示位置删除。我做了很多研发,发现placement delete不能直接调用,异常时由构造函数调用。那么我怎样才能跟踪放置删除与新放置的对比呢?
任何帮助将不胜感激......
最佳答案
您想配对分配和释放:
- malloc/自由
- 新建/删除(“常规”形式)
- 新建[]/删除[]
但是您将什么与 placement new 配对? (明确地说:采用 void* 并且通常简称为“placement new”,而不是 new 的其他放置形式的那个。)它不是删除,而是一个显式的析构函数调用。
T *p = new(mem) T();
/p->~T()
Placement new 实际上并没有分配任何东西,它只是调用构造函数的语法糖。您不需要也不应该跟踪它。它甚至比其他形式更奇怪,因为通常首先调用“销毁”位,然后用另一个对象替换被销毁的对象(与其他对象的顺序相反):
{
T some_object;
some_object->~T(); // die! die! die!
new(&some_object) T(); // didn't save the return value? memory leak..? nope.
} // some_object leaves scope and is destructed (again)
关于c++ - 跟踪放置删除与放置新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4030575/