我正在开发一种像内存泄漏检测器的工具.我可以跟踪新的展示位置,但我如何跟踪展示位置删除.我做了很多研发,我发现放置删除不能直接调用,它在异常时由构造函数调用.那么我如何才能跟踪展示位置删除对新展示位置的影响呢?
任何帮助,将不胜感激......
小智 10
您想要分配和解除分配:
但是你与新的配对有什么关系呢?(明确地说:采用void*且通常简称为"placement new"的那个,而不是new的其他放置形式.)它不是删除,而是显式的析构函数调用.
T *p = new(mem) T();
/p->~T()
Placement new实际上并没有分配任何东西,它只是调用构造函数的语法糖.您不需要也不应该跟踪它.它甚至比其他形式更怪异,因为首先调用"destroy"位,然后用另一个替换被破坏的对象(与其他形式的序列相反)并不罕见:
{
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)
Run Code Online (Sandbox Code Playgroud)