【问题标题】:What exactly is the ownership when we talk about smart pointers in C++? [duplicate]当我们谈论 C++ 中的智能指针时,所有权到底是什么? [复制]
【发布时间】:2020-10-28 21:57:15
【问题描述】:

在阅读智能指针时,尤其是在std::shared_ptrstd::weak_ptr 的情况下,我经常发现人们使用术语“所有权”或“它拥有对象”。但这种所有权到底是什么?在尝试理解std::weak_ptr 的用例时更加令人困惑!

如果我们写int a = 2,那么我们可以说a owns 2吗?或

更具体地说,在int a = 2; int* ptr_a = &a; 中,我们可以说ptr_a 拥有a吗?

【问题讨论】:

  • 所有权通常用于定义谁负责删除动态分配的内存,因此您的int示例不适合这个,因为没有动态分配
  • 这有助于回答您的问题吗? What is ownership of resources or pointers?
  • 因为上面的链接没有涵盖它,所以weak_ptr不是所有者。当资源被释放时,它没有任何发言权。它所获得的是一种测试资源是否已被释放并在尚未释放的情况下声明(通常是临时的)所有权份额的方法。

标签: c++ pointers smart-pointers


【解决方案1】:

就智能指针而言,所有权是对在内存中创建的对象的生命周期具有权限的代码单元。

如果对象的生命周期在两个地方共享,这意味着所有权是共享的,除非两个地方都同意释放/销毁该对象,否则它不会被销毁。

如果ownership是single,那个代码单元可以决定什么时候销毁对象,其他所有的referrer代码只能获取一个弱指针,不能保持对象存活,只知道它是否被销毁。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 2010-11-26
    • 2019-11-07
    • 1970-01-01
    • 2014-07-25
    • 1970-01-01
    相关资源
    最近更新 更多