【C++高级编程】智能指针 shared

您所在的位置:网站首页 智能指针weak_ptr 【C++高级编程】智能指针 shared

【C++高级编程】智能指针 shared

2023-03-08 03:00| 来源: 网络整理| 查看: 265

shared_ptr作为函数参数时, 无论是值传递还是引用传递都增加引用计数, 两者效果一样。为什么会出现weak_ptr?对shared_ptr对象的错误引用导致内存泄露: 例如:两个类的数据成员互相引用, 会导致互相的资源无法释放。参考用例:第 5 章 智能指针与内存管理 现代 C++ 教程: 高速上手 C++ 11/14/17/20 - Modern C++ Tutorial: C++ 11/14/17/20 On the Flyweak_ptr不拥有资源, 不能阻止shared_ptr释放资源weak_ptr.lock()方法可以获取shared_ptr指针, 从而操作shared_ptr对象的数据成员, 如果已经释放则返回nullptr 。

示例如下:

#include #include m_data, s.use_count()); } else { fmt::print("useSimple freed!\n"); } } /* construct...10 share_simple: 10 use_count:1 useSimple alive! m_data:10 use_count:2 destruct! 10 useSimple freed! */ int main(int argc, char **argv) { auto share_simple { make_shared(10) }; //访问类成员用->, 访问shared_ptr成员函数用. fmt::print("share_simple: {} use_count:{}\n", share_simple->m_data, share_simple.use_count()); weak_ptr weak_simple { share_simple }; useSimple(weak_simple); share_simple.reset(); useSimple(weak_simple); return 0; }



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3