我有一个独特的指针向量.其中,我想要一个不占用其尖头物体的所有权.怎么做?
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.
Run Code Online (Sandbox Code Playgroud)
问题来自以下案例.我有一个树结构的数据,由GUI树小部件表示.父节点通过使用来获取其子节点的所有权vector<unique_ptr<T>>.但有一个例外.我有一个常见的单例数据,并希望将它附加到树上,以便友好的用户界面.有冲突因为sigleton也取得了所有权.使用share_ptr有效,但牺牲了一些性能.
感谢所有人的回答,评论和建议.这可能是一个设计缺陷.也许我需要一个特殊父节点的新类vector<unique_ptr<T>>(对于其他人)和shared_ptr甚至一个原始指针(对于单例)来处理异常.
你想要一个unique_ptr不拥有它指向的东西.
这些目标是相互对立的.重点unique_ptr是拥有它管理的资源.
这对我来说很难推断出它是什么你真的在这里后,你有没有说什么你正在尝试做的-只是如何你想做到这一点.为什么你想要一个unique_ptr不拥有资源的?
也许您真正追求的是a shared_ptr,因此a的多个实例shared_ptr可以共享同一对象的所有权.
再一次,也许你所追求的是一个weak_ptr,它本身不会(完全)"拥有"一个指针,直到它被提升为一个shared_ptr.
看完你的编辑后,我可能会预感到你在这之后的真实情况.您已经说过,您希望您的单例对象实际拥有该资源,但您仍然希望您vector拥有智能指针.也许你真正想要的是vector拥有一个不拥有对象本身的智能指针,但如果实际拥有的对象被破坏,它将变为无效或"无效".
如果是这种情况,那么你的单身人士应该有一个shared_ptr,而矢量应该是a vector<weak_ptr>.当您需要通过实际获取对象时vector,您将调用lock提取shared_ptr- 检查返回lock以确保weak_ptr未过期.你也可以shared_ptr通过调用来检查是否已经过期而没有锁定它expired.
| 归档时间: |
|
| 查看次数: |
182 次 |
| 最近记录: |