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++ 'static int' 不能跨多个文件工作吗?

c++按类型大小而不是类型声明变量

C - 套接字编程 - 任意发送/接收 - 指针算术 - 数组不可分配

javascript - 在 Javascript 中,我应该在加载新实例后删除上一级别的实例吗?

gwt - gwt 中的内存使用情况

c++ - 使用 boost 获取文件的所有者和组

c++ - 将指向成员函数的指针转换为 intptr_t

使用指针的 C 数组求和?

JavaScript 内存管理陷阱?

c++ - 使用 find() 在 vector 中查找元素