-1

I am starting to learn c++ and have a simple question. When i have std::vector which schould hold some custom objects. Is it better to create those object with the new operator or should i just normally instantiate the objects and pass it to the vector? I am just wondering, because in Java i do not need to care about this.

i.e. i am creating a bunch of objects in the main class. Then i pass these objects in a vector which is contained in another class Is it okay to instantiate the object on the stack? Or should i always do it with the new operator (then i have to take care that the objects get deleted somewore). or is the simple answer: it depends on your program?

cheers

4

3 回答 3

2

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

于 2013-06-27T14:33:46.003 回答
1

对象是多态的(即你是否在使用继承)?您打算共享对象引用吗?它们是不可复制的吗?如果这些问题的答案是否定的,您最好按值存储它们(使用 emplace)。

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

于 2013-06-27T14:34:07.047 回答
0

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

要意识到的是std::vector存储对象的副本,所以如果它们更小,那么你就不用关心复制了。此外,如果这些对象内部有任何动态内存使用情况,那么您可能应该重载复制构造函数,因为这是用于制作这些副本的内容。

于 2013-06-27T14:39:07.393 回答