保持对展示位置的跟踪删除新展示位置

max*_*dev 4 c++

我正在开发一种像内存泄漏检测器的工具.我可以跟踪新的展示位置,但我如何跟踪展示位置删除.我做了很多研发,我发现放置删除不能直接调用,它在异常时由构造函数调用.那么我如何才能跟踪展示位置删除对新展示位置的影响呢?

任何帮助,将不胜感激......

小智 10

您想要分配和解除分配:

  • malloc /免费
  • 新/删除("常规"表格)
  • new []/delete []

但是你与新的配对有什么关系呢?(明确地说:采用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)