【发布时间】:2016-08-25 01:28:33
【问题描述】:
我对内存泄漏非常谨慎,所以我想我会对此进行验证。在以下示例中是否会出现内存泄漏?我的直觉告诉我是的。
class Handler // Class definition
{public:
~Handler();
int* ptrToInts;
};
Handler::~Handler() // Class destructor
{
delete[] ptrToInts;
}
Handler handler; // Global object
void aFunction()
{
handler.ptrToInts = new int[20];
}
int main()
{
bool quit = false;
while(!quit)
{
aFunction();
}
return 0;
}
ptrToInts 会在堆时间的单独内存中创建 20 个单独的新整数吗?
另外,另一个问题是,如果不是析构函数,动态分配的内存会被释放吗?好像类的生命周期就是程序的持续时间,它会清理所有“新”内存吗?
编辑:感谢您的回答。我问这个的原因是因为我试图绕过调用 new 和 delete 每次调用 WndProc 基本上是原始输入,这就是 MSDN 告诉你这样做的方式。看起来效率很低。
【问题讨论】:
-
如果您不止一次执行
new而delete[]仅执行一次,那么是的,您有内存泄漏。它们需要保持平衡。 -
使用工具(如valgrind.org)来告诉你你的程序是否(以及在哪里)有内存泄漏。
-
valgrind 不能在 MS Windows 平台上运行。
标签: c++ pointers memory memory-leaks heap-memory