【发布时间】:2013-06-07 21:08:54
【问题描述】:
我是 C++ 的新手,我很难理解所有权,特别是使用 getter。下面是一些示例代码:
class GameObject {
public:
Transform *transform();
private:
Transform _transform;
};
我猜原始指针使用起来是不安全的,因为稍后当对象不再存在时有人可以访问它?
所以我考虑使用 unique_ptr 作为变换成员,因为 GameObject 是唯一拥有变换的对象。但是我不能从吸气剂那里返回它,可以吗?但是话又说回来,为什么我会首先使用 unique_ptr 而不是像上面那样将其添加为成员?
那么为什么不使用 shared_ptr 呢?这对我来说似乎是错误的,我不想分享所有权,GameObject 是所有者,其他人可以访问它......
那是什么?参考?我猜 shared_ptr 似乎是最明智的选择,因为其他人可以安全地保留对 transform 的引用,但是如果封闭的 GameObject 被破坏,使变换无用又有什么好处呢?我可能只是在这里以错误的方式思考所有权,但在我看来,每一种方式都是错误的。感谢您的帮助。
【问题讨论】:
-
您可以通过 shared_ptr 存储 _transform 成员,并从您的 getter 函数返回weak_ptr。
标签: c++ c++11 shared-ptr unique-ptr ownership