c++ vector - push_back(*new obj()) 和 push_back(obj()) 有什么区别?

标签 c++ vector memory-management heap-memory push-back

<分区>

我目前遇到与以下相关的问题:

vector<myObj> myVector;

Q1。请告诉我以下两行之间的区别:

a) myVector.push_back(*new myObj());
b) myVector.push_back(myObj());

注意:我意识到 a) 行是不好的做法,因为它会在将 myObj 的内容复制到 vector 之前动态分配它,从而导致内存泄漏,因此无法释放...

但是,我假设这两行应该导致 vector 包含完全相同的内容,尽管看起来这个假设是不正确的。我目前正在开发的软件使用 a) 行运行良好(我知道,我知道这会导致泄漏,请暂时忽略它)但在 b 行出现各种不同的 exc_bad_access 错误而崩溃。

Q2。谁能解释为什么会这样?

编辑:发布此内容时,我最初假设我的问题一定与生成的 vector 内容中的某些差异有关,但我的问题实际上与满足“三原则”有关 http://en.wikipedia.org/wiki/Rule_of_three_(C%2B%2B_programming) 感谢@WhozCraig、@juanchopanza 和@Alex Antonov 的帮助!

最佳答案

what is the difference...

不同之处在于 a) 行会导致内存泄漏,而 b) 行不会。这是因为 a) 中动态分配的对象被立即丢弃了,并且没有在其上调用 delete 的句柄。 vector 持有并拥有它的元素,在本例中,这些元素是您推回其中的内容的拷贝。

The software I am currently developing runs fine using line a) but crashes with various different exc_bad_access errors on line b).

它可能看起来运行良好,但存在资源泄漏。因此,无论怎么想,这都不好。如果您对行 b) 有疑问,可能是因为 myObj 管理资源并且不遵循 rule of three . b) 行应该适用于设计良好的类(class)。

关于c++ vector - push_back(*new obj()) 和 push_back(obj()) 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21348384/

相关文章:

c++ - 在 vector 中使用 reserve() 的好处 - C++

c++ - 如何将箭头::数组转换为标准:: vector ?

iphone - 为什么这个NSMutableSet不会泄漏内存

c++ - 如何检查c++中是否存在记录(数据文件处理)?

c++ - 在代码中包含 100 多个单词的最佳方法是什么?

android - 使用 LruCache 在内存中存储位图

c# - 在 C# 中从内存映射文件中查找元素

c++ - C++ 中的复合函数

c++ - 让 TAB 键在我的 win32 应用程序中工作

c++ - 当我用 C 编写 C++ 代码时是否可能显示错误?