【发布时间】:2014-06-20 10:47:19
【问题描述】:
我是 C++ 的新手,我正在开发应用程序,我通过使用 new 关键字(如 MyObject* obj = new Object())在内存中分配大量对象。在对它们进行一些操作之后(稍后的一些代码行),我正在调用像delete obj 这样的析构函数。但是经过多次迭代,我注意到内存消耗很大,显然这些对象没有被破坏。所以我尝试了简单的例子:
Algorhitm* alg;
for (int o = 0; o < 500000000; o++)
{
alg = new Algorhitm();
alg->~Algorhitm();
}
还有delete alg,但似乎没有释放内存。内存消耗增加到临界点,然后导致我的应用程序崩溃。有人可以向我解释一下,我做错了什么吗?我使用了名为 C++ Memory Validator 的内存分析工具,在一些内存分配和解除分配图表的部分中,只有分配,但该工具无法识别解除分配。
【问题讨论】:
-
您是否有好的理由首先使用动态内存?
-
Algorhitm类有哪些成员?如果它有任何指针,您必须编写自己的析构函数来释放它们。默认析构函数不会“释放”它们。此外,通常您应该坚持使用delete,而不是手动调用析构函数。 -
请提供complete, minimal program 展示该程序。您可能做错了六件基本的事情,虽然每个问题都有很好的答案,但我们首先需要找出我们正在处理的情况。
-
alg->~Algorithm();调用析构函数,但它不会释放内存。你必须使用delete alg;来释放内存。 -
@πάνταῥεῖ:好吧,你声称这是未定义的行为也是错误的。这是内存泄漏。使用内存仍然是允许的,但如果没有指向它的指针,就没有办法这样做。
标签: c++ memory memory-management destructor