1. vim配置教程:链接
#include <iostream>
template<typename T>
struct ListNode
{
T _value;
std::shared_ptr<ListNode> _prev;
std::shared_ptr<ListNode> _next;
ListNode(const T & value)
:_value(value)
, _prev(NULL)
, _next(NULL)
{}
~ListNode()
{
std::cout << "~ListNode()" << std::endl;
}
};
int main()
{
std::shared_ptr<ListNode<int>> sp1(new ListNode<int>(10));
std::shared_ptr<ListNode<int>> sp2(new ListNode<int>(20));
sp1->_next = sp2;
sp2->_prev = sp1;
//构成死锁,出了函数作用域,也没有调用析构函数
std::cout << sp1.use_count() << std::endl; //sp1的引用计数
std::cout << sp2.use_count() << std::endl; //sp2的引用计数
system("pause");
return 0;
}
本文通过一个具体的代码示例,深入探讨了C++中std::shared_ptr的使用及可能引发的死锁问题。文章详细分析了双向链表节点在使用智能指针时的引用计数机制,并展示了如何避免因智能指针相互持有导致的资源释放失败。
22万+

被折叠的 条评论
为什么被折叠?



