唯一的指针所有权
Unique pointer ownership
我很难理解唯一指针的所有权。有谁能解释一下如何在集合中存储一个指向唯一指针的指针?
来自SFML游戏开发手册的例子,说明了这个问题:
typedef std::pair<SceneNode*, SceneNode*> Pair;
typedef std::unique_ptr<SceneNode> Ptr;
std::vector<Ptr> mChildren;
void SceneNode::checkSceneCollision(SceneNode& sceneGraph, std::set<Pair>& collisionPairs)
{
checkNodeCollision(sceneGraph, collisionPairs);
for(Ptr& child : sceneGraph.mChildren)
checkSceneCollision(*child, collisionPairs);
}
void SceneNode::checkNodeCollision(SceneNode& node, std::set<Pair>& collisionPairs)
{
if (this != &node && collision(*this, node))
collisionPairs.insert(std::minmax(this, &node));
for(Ptr& child : mChildren)
child->checkNodeCollision(node, collisionPairs);
}
这不是违背了unique_ptr的含义吗?因为可以从集合中访问实际对象并修改它
这不是违背了unique_ptr的含义吗?
。正如您所说的,unique_ptr
指定了所有权语义,而没有其他含义。特别是,它指定指针只有一个所有者,但它没有说明访问的任何内容。可以有任意多个访问器
唯一的ptr只能通过引用来访问。因此,这两种情况下的所有权都不会改变——容器是ptr的所有者。
for(Ptr& child : mChildren)
child->checkNodeCollision(node, collisionPairs);
在这种情况下,为每个包含的指针创建一个引用,该引用从不调用move或copy语义,因此不参与所有权。
相关文章:
- 智能指针概念所有权和寿命
- 如何指示指针C++所有权
- 如何将所有权从一个共享指针向量转移到另一个向量?
- C++类指针和所有权
- 什么是资源或指针的所有权?
- 进入智能指针,如何处理代表所有权
- 将智能指针所有权转移到容器
- 将原始指针的所有权转移到unique_ptr
- 明智的指针所有权语义和平等
- EIGEN地图 - 它是否占数据指针的所有权
- 带有原子变量的指针所有权
- 如果指针已经被删除,指针容器怎么能拥有指针的所有权
- 是否使用unique_ptr作为所有权和原始指针
- 文件输入和指针所有权语义
- 指针所有权
- 我的自动指针即使在所有权转让后也能正常工作
- 如何证明您传递了指针的所有权
- C++:在共享所有权的情况下,C++11移动语义可以避免指针吗
- Objective-C ARC 指针所有权与C++
- 指向没有所有权的堆栈对象的指针