【发布时间】:2013-10-16 14:25:19
【问题描述】:
我有一个唯一指针向量。其中,我希望一个不占用其指向对象的所有权。怎么做?
vector<unique_ptr<int>> v;
v.push_back(make_unique<int>(10));
unique_ptr<int> p(new int(20)); // add it to v but keep p take the ownership.
问题来自以下案例。我有一个由 GUI 树小部件表示的树结构数据。父节点使用vector<unique_ptr<T>> 获取其子节点的所有权。但有一个例外。我有一个常见的单例数据,并希望将其附加到树中以获取友好的用户界面。存在冲突,因为 sigleton 也取得了所有权。使用 share_ptr 可以,但会牺牲一些性能。
感谢大家的回答、cmets 和建议。这可能是一个设计缺陷。也许我需要一个带有vector<unique_ptr<T>>(对于其他人)和shared_ptr 的特殊父节点的新类,甚至是一个原始指针(对于单例)来处理异常。
【问题讨论】:
-
你为什么要这样做?动机是什么?使用原始指针?
-
你不能——这个名字是唯一的指针是有原因的。
-
为什么不使用
shared_ptr和weak_ptr? -
我不会卷入整个“单身狗烂”的圣战(不只是提及),但我仍然想知道你为什么想要
vector<unique_ptr>如果您认为该资源应该归其他人所有? -
XY-Problem 警报。请说明你真正想做什么,而不是你想怎么做
标签: c++ unique-ptr