【c++ 回顾】所有权

直接的讲,C++ 里面的对象所有权的关系,指的是谁负责delete谁的关系。让我们来看几个例子,假设类 A 的一个成员变量是一个指向了类 B 的实例的指针。

独占所有权:如果 A 对 B 有独占所有权的话,那么 A delete B。这里面也包含着另一层意思,如果 C 想要持有 B,那么就必须让 A 放弃对 B 的所有权,把它的成员变量设置为nullptr。现在就由 C 来决定在什么时候 deleteB,这个对象跟 A 再也没有关系了。独占的意思就是不分享,而且所有权也是可以转移的,转移后仍然是独占。

分享所有权:如果 A 对 B 有分享所有权的话,那么 B 由最后一个持有该对象的 A 来delete。如果 C 想要持有 B,那么 A 这个时候不需要放弃对 B 的所有权,转而将讲所有权分享给 C。如果所有的 A 都没有了,C 还在的话,那么由 C 来决定什么时候 deleteB。如果 C 首先放弃了所有权(譬如说 C 自己被delete了),那么仍然由最后一个持有 B 的 A 来 deleteB。

弱引用:如果 A 对 B 有弱引用的话,那么 A 不负责 deleteB,但是 A 可以使用 B。如果 B 已经被拥有所有权的对象delete了,那么 A 会收到通知。这个时候如果 A 还想试图使用 B,就会拿到一个nullptr

最后一种就是普通的指针了。普通的指针没有任何功能,指向的对象被delete了你也不知道,稍微不注意就容易炸裂。所以这就是为什么 C++ 推荐我们使用这一套智能指针来管理对象与对象之间的关系,因为只要好好使用,程序永远不会“Access Violation”。

以上来自计蒜客:)

你可能感兴趣的:(c++)