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

3

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


2
它使用 RAII 来减少计数器。当计数器归零时,该特定析构函数调用将删除对象。 - Mysticial
1个回答

6

std::shared_ptr<T>扩展了RAII,用于具有多重所有权的资源。与自己计算何时删除共享对象相比,您将共享指针取下,让它销毁共享对象,但仅当它是最后一个引用时。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接