【发布时间】:2022-01-22 18:35:36
【问题描述】:
我有一个现有的容器,里面装满了自动分配的结构对象,如下所示:
std::vector<Object> objectList {obj1, obj2, obj3};
我正在尝试创建一个新容器 useObjectList,其中包含指向这些现有对象的指针/引用,以便我能够访问和修改任一列表中的对象成员值。
我试图通过创建一个共享指针容器来实现这一点
std::vector<std::shared_ptr<Object>> useObjectList {std::make_shared<Object>(objectList[1])};
但它根本没有解决(鉴于我的知识有限,我假设 std::make_shared 完全构造和/或分配一个新对象?)。
如果我能得到任何建议,我将不胜感激。
【问题讨论】:
-
它们是否意味着非拥有指针?如果是这样,
std::vector<Object *>可以解决问题(当然,您需要确保原始向量中的对象保持有效以避免悬空指针问题;特别是您可能不想修改原始向量任何可能将其大小调整为更大或更小的方式) -
使用原始指针
std::vector<Object*> useObjectList {&obj1, &obj2, &obj3};。 -
make_shared表示您的shared_ptr(s) 指向对象的副本。如果您想要一个指向 same 对象的指针向量,请执行std::vector<Object *> useObjectList{&obj1, &obj2, &obj3}或(指向objectList的元素,它们也是obj1的副本..obj3不是引用/指向他们的指针)做std::vector<Object *> useObjectList{&objectList[0], &objjectList[1], &objList[2]} -
在这种情况下可以使用原始指针吗?从人们告诉我的内容和我阅读的教程来看,他们总是建议避免使用原始指针。
-
取决于你要对指针/引用/对象做什么。原始指针有其用途,就像“智能”指针一样。如果您(如您所愿)声明您需要一个指针/引用向量,但没有提及 为什么 您需要它,那么原始指针是一个不错的选择。
标签: c++