RAII和shared_ptr之间的关系是什么?

时间:2014-07-31 00:56:25

标签: c++ shared-ptr raii

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

1 个答案:

答案 0 :(得分:6)

std::shared_ptr<T>将RAII扩展到拥有多个所有权的资源。您不必弄清楚何时删除共享对象,而是将共享指针放下,让它破坏共享对象,但仅限于它是最后一个引用。

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