为了演示,我创建了这个简单的控制台应用程序:

#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,则不会泄漏。

09-21 00:00