如何解决当我们谈论C ++中的智能指针时,所有权到底是什么?
在阅读智能指针时,尤其是在std::shared_ptr
和std::weak_ptr
的情况下,我经常发现人们使用术语“所有权”或“它拥有对象”。但是,所有权到底是什么?试图了解std::weak_ptr
的用例时,甚至更加令人困惑!
如果我们写int a = 2
,那么我们可以说a owns 2
吗?或
更具体地说,在int a = 2; int* ptr_a = &a;
中,我们可以说ptr_a
拥有a
吗?
解决方法
就智能指针而言,所有权是对在内存中创建的对象的生命周期拥有权限的代码单元。
如果对象的生存期在两个地方之间共享,则意味着所有权是共享的,除非两个地方都同意释放/销毁该对象,否则它不会被破坏。
如果所有者是单一的,则该代码单元可以确定何时销毁该对象,所有其他引荐来源代码只能获取一个弱指针,它们不能使该对象保持活动状态,仅知道该对象是否被破坏。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。