首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

boost 智能指针 shared_ptr

但只有 shared_ptr 是最接近普通指针的一种智能指针,他具有一些非常良好的特性,比如计数器等等,使用 shared_ptr 可以让我们不用花费精力在内存回收上。...其他的一些指针与 shared_ptr 的区别如下表: 本文主要介绍 shared_ptr 的一些特性,以后如果你使用到 boost 库,那么用到这个智能指针也会是最多的。...2、boost::shared_ptr不需要手动的调用类似release****方法: 它不像侵入式实现的智能指针一样需要手动的调用类似release方法,全部用由shared_ptr内部的计数器自动增减...例如std::vector IntVec,使用shared_ptr方式为std::vector IntptrVec. 4、boost::shared_ptr...boost::shared_ptr ptr_obj001(new MyClass()); cout << ptr_obj001.use_count() << endl; boost::shared_ptr

16210
您找到你想要的搜索结果了吗?
是的
没有找到

善用shared_ptr,远离内存泄漏(文末福利)

中说到,如果有可能就使用unique_ptr,然后很多时候对象是需要共享的,因此shared_ptr也就会用得很多。...shared_ptr允许多个指向同一个对象,当指向对象的最后一个shared_ptr销毁时,该对象也就会自动销毁。因此,善用shared_ptr,能够远离内存泄漏。...存放于容器中的shared_ptr 如果你的容器中存放的是shared_ptr,而你后面又不再需要它时,记得使用erase删除那些不要的元素,否则由于引用计数一直存在,其对象将始终得不到销毁,除非容器本身被销毁...*/ std::shared_ptr sp2(p); return 0; } 这样会导致两个shared_ptr管理同一个对象,当其中一个被销毁时,其管理的对象会被销毁...总结 以上就是shared_ptr基本内容,一般来说,规范使用shared_ptr能很大程度避免内存泄露。注意,shared_ptr提供,*,->操作,不直接提供指针运算和[]。

1.6K10

C++(STL):03---智能指针之shared_ptr

//指向一个值为42的int的shared_ptr shared_ptr p = make_shared(42); //p2指向一个值为10个'9'的string shared_ptr...引用计数:shared_ptr类所指向的对象都有一个引用计数 但对shared_ptr类进行拷贝时,计数器就会增加。...例如:当用一个shared_ptr初始化另一个shared_ptr、或者它作为参数传递给一个函数以及作为函数的返回值,它所关联的计数器就会增加 当我们给让shared_ptr指向另一个对象或者shared_ptr...shared_ptr类是通过析构函数来完成销毁工作的 内存浪费:因为只有在销毁掉最后一个shared_ptr时,该指针所指向的内存才会释放,因此如果你忘记了销毁程序不再需要的shared_ptr,程序仍然正在执行...,那么就造成内存浪费 五、shared_ptr与作用域的关系 shared_ptr类所指向的内存何时被释放,与shared_ptr类的生存周期有关 演示案例: 首先我们定义下面的函数返回一个指向于一个值的

1.5K20

当我们谈论shared_ptr的线程安全性时,我们在谈论什么

自C++11起,shared_ptr从boost转正进入标准库已有10年了。然而当C++程序员们在谈论shared_ptr是不是线程安全的的时候,还时常存在分歧。...你认为shared_ptr有哪些线程安全隐患? shared_ptr 可能的线程安全隐患大概有如下几种,一是引用计数的加减操作是否线程安全,二是shared_ptr修改指向时,是否线程安全。...比如: shared_ptr sp1 = make_shared(); ... shared_ptr sp2 = sp1; ... shared_ptr sp3 = sp1;...shared_ptr对象,参数类型是引用: void fn(shared_ptr& sp) { ... } ......尽管如此,由于shared_ptr使用上的特殊性,所以我们有时也要将其纳入到shared_ptr相关的线程安全问题的讨论范围内。

1K30
领券