【问题标题】:what is the relation between RAII and shared_ptr?RAII 和 shared_ptr 之间的关系是什么?
【发布时间】:2023-03-18 17:02:01
【问题描述】:

我理解了 RAII 的概念(资源获取就是初始化)。它基本上说应该在析构函数中回收资源以避免任何内存泄漏。但我不明白 shared_ptr 是一种 RAII。因为 shared_ptr 不保证指针会在栈尾被删除。删除完全取决于计数器。那么它与 RAII 有什么关系呢?

【问题讨论】:

  • 使用 RAII 来减少计数器。当它达到零时,该特定的析构函数调用将删除该对象。

标签: c++ shared-ptr raii


【解决方案1】:

std::shared_ptr<T> 将 RAII 扩展到具有多个所有权的资源。您不必自己弄清楚何时删除共享对象,而是将共享指针向下,让它销毁共享对象,但前提是它是最后一个引用。

最好不要将共享指针指向的对象视为该共享指针对象拥有的对象。相反,可以将其视为由指向它的所有共享指针共同拥有。共享指针对象获取的资源不仅是对象本身,还有它的引用计数器。释放对象相当于减少引用计数器,但需要注意的是,一旦引用计数降至零,就必须执行删除对象的额外操作。

【讨论】:

    猜你喜欢
    • 2021-01-04
    • 2012-01-30
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    • 2016-10-03
    • 1970-01-01
    相关资源
    最近更新 更多