为了演示,我创建了这个简单的控制台应用程序:
#include <iostream>
class Person {
public:
int mAge;
};
int main(int argc, const char * argv[])
{
Person *iPerson = new Person();
iPerson->mAge = 15;
std::cout << "Age: " << iPerson->mAge;
return 0;
}
现在,我知道Valgrind和CPP Check将在此处识别泄漏,但是在测试Apple的Instruments时,当我分析此代码时,看不到任何泄漏。尽管iPerson从未被删除。
最佳答案
泄漏仪器以预定的频率执行快照。默认情况下,该值为“每10秒”。您的程序将在10秒之前完成。因此,从不收集泄漏。因此,您必须在iPerson
超出范围后暂停执行,才能检测到该泄漏。另外,如果仅在堆栈或寄存器中仍引用该指针的情况下添加sleep
,则不会泄漏。