将对象或指针存储在矢量中

use*_*652 3 c++ oop

我在这里问了一个非常相似的问题,但由于这是一个基本问题,我想更准确地陈述我的(新)问题.

假设我有一个非常复杂的A类,A的每个实例都存储在多个容器中,例如向量,队列,......

即使在静态设置中,也意味着对象一次被添加到容器中,不会被删除也不会被修改:
容器现在是否包含指向对象或对象本身的指针?

And*_*rew 8

如果需要对象的副本 - 使用对象.如果需要共享对象或需要多态行为 - 使用容器smart pointers.在使用智能指针的情况下,您将同时具有自动对象销毁和多态行为.

例如:

std::vector<std::shared_ptr<MyObject>> v;
auto ptr = std::shared_ptr<MyObject>(new MyObject());
v.push_back(ptr);
Run Code Online (Sandbox Code Playgroud)

如果您需要存储唯一指针(不共享):

std::vector<std::unique_ptr<MyObject>> v;
auto ptr = std::unique_ptr<MyObject>(new MyObject());
v.push_back(std::move(ptr));
Run Code Online (Sandbox Code Playgroud)

  • @Drise:为了提高效率,更喜欢make_shared <T>()来创建shared_ptr. (2认同)