c++ - Object Mat(args); 之间的区别 - 内存分配明智 -和 Object *Mat = new Mat(args);在 C++ 中?

标签 c++ pointers memory-management heap-memory stack-memory

<分区>

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 .

关于c++ - Object Mat(args); 之间的区别 - 内存分配明智 -和 Object *Mat = new Mat(args);在 C++ 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12550482/

相关文章:

c - int * ( * ) ( int * ) 这个类型在c语言中代表什么?

c++ - 如何计算内存分配的数量

C++二叉树错误: request for member (X) in (Y) which is of non-class type (Z)

c++ - Linux 上的 SNMP 支持

c++ - 在指向同一对象的两个指针上调用 delete

c - 使用指针扫描和打印字符串

linux - 就其第三个参数而言,mprotect() 作为 ASM 系统调用的用法是什么样的?

memory-management - 识别 Julia 中异常的内存分配

c++ - Boost Thread - 创建一个没有 join() 的线程

c++ - 如此处所述,使用指向指针的指针可以解决类成员的非更新问题吗?如果是如何?