Possible Duplicate:
Proper stack and heap usage in C++?
Heap vs Stack allocation
我试图理解为什么我从 Java 移植到 C++ 的库(在使用转换器后进行了漫长而艰巨的编辑工作)没有释放内存而只是爆炸虚拟内存直到崩溃。
显然,这与具有 GC 而 C++ 没有的 Java 有关 - 并且算法非常直接地转换为 C++。
所以这是我的问题。我在哪里以及如何删除分配的内存(释放它)?当我有:
Matrix *mat = new Matrix(args);
我显然需要用 delete mat;
结束作用域。我可以避免这种情况吗?
使用 Matrix mat(args);
会更好吗?在内存分配和释放方面?
或者使用 Matrix mat = Matrix(args)
?
Where and how do I delete allocated memory? (Free it)
在大多数情况下,如果您正确编码,则不必显式释放或取消分配任何内存。要么使用自动分配,要么 smart pointers .否则,where 的答案是相当不能令人满意的:无论您需要在哪里,取决于您的程序。 如何 的答案更简单:使用delete
(或delete[]
用于动态分配的数组)。
... I obviously need to end the scope with a delete mat;
Can I avoid this?
是的,如果您使用自动分配:
Matrix mat(args);
作为一般规则,您应该只在确实需要时才使用动态分配的对象。如果您不知道自己是否真的需要,那么您可能不需要。
... Or using Matrix mat = Matrix(args);
这执行复制初始化,并且在这种情况下与 Matrix mat(args);
相比没有任何优势。表达式的 RHS 是一个临时的 Matrix
对象,用于复制构造 LHS mat
。
这是最近的 related post .