C ++向量元素是否动态实例化

时间:2013-06-27 14:29:25

标签: c++ vector new-operator

我开始学习c ++并且有一个简单的问题。 当我有std::vector时,可以存放一些自定义对象。 使用new运算符创建这些对象是否更好?或者我应该通常实例化对象并将其传递给向量?我只是想知道,因为在Java我不需要关心这个。

即。我在主类中创建了一堆对象。然后我将这些对象传递给另一个类中包含的向量是否可以实例化堆栈中的对象?或者我应该总是使用new运算符(然后我必须注意对象被删除)。或者是简单的答案:这取决于你的程序?

欢呼声

3 个答案:

答案 0 :(得分:2)

简单就是更好。只是将值直接存储在向量中,除非值是(a)巨大的,(b)不可复制的(即使我们在C ++ 11中有std :: move),或者(c)由另一个对象拥有(使用shared_ptr或raw指针)。

答案 1 :(得分:1)

对象是多态的(即你是否正在使用继承的非传统)?你打算分享对象引用吗?它们是不可复制的吗?如果这些问题的答案都是肯定的,那么你最好用价值来存储它们(使用emplace)。

如果您通过引用存储它们,您应该使用各种智能指针。

答案 2 :(得分:0)

这实际上取决于对象。如果它们只是包含几个简单值的小结构,那么您实际上不需要使用new。但是如果你的对象非常大或者其中有其他类,那么我会将它们的指针传递给你的向量。

要意识到的是std::vector存储了对象的副本,因此如果它们较小,则不关心复制。此外,如果这些对象内部有任何动态内存使用,那么您应该重载copy-constructor,因为这是用于制作这些副本的内容。