(COM的IUnknow接口以及boost::intrusive_ptr都是基于侵入式设计的智能指针,需要手动调用类似release方法)3、boost::shared_ptr支持所有权转移:并且可以安全的存储在stl标准容器中,是在stl容器存储指针的标准解法。例如std::vector<int*> IntVec,使用shared_ptr方式为std::vector<boost:
直觉上来说,既然是一个指针的数组,而且要传给别人,那用std::vector<boost::shared_ptr<T>>最合适了,然后传个const&给别人,搞定。 不过看到瑞典同事有人用boost::ptr_vector,这个新鲜的玩意儿不常见,研究一下,原来是Boost.Pointer Container的一部分,用来保存heap-allocated objects,有放进去的指针会在出了作用域...
shared_ptr应该就是一种智能指针,这一概念在C++primer当中有提到过。或者称“引用计数指针” boost shared_ptr的教程内容网上有不少,其中比较详细的要算《boost库导论》了。 shared_ptr 头文件:"boost/shared_ptr.hpp" shared_ptr可以从一个裸指针、另一个shared_ptr、一个std::auto_ptr、或者一个boost::weak_...
boost::shared_ptr<int> p1(new int(10)); std::cout << "ref count of p1: " << p1.use_count() << std::endl; boost::shared_ptr<int> p2(p1); // or p2 = p1; std::cout << "ref count of p1: " << p1.use_count() << std::endl; *p1 = 999; std::cout << "*p2:...
Test.cpp: In constructor ‘Test::Test(boost::shared_ptr<std::list<std::basic_string<char> > >)’: Test.cpp:6:85: error: no matching function for call to ‘boost::shared_ptr<std::vector<std::basic_string<char> > >::shared_ptr(std::list<std::basic_string<char> >::iterator, st...
#include<boost/shared_ptr.hpp> classimplementation { public: ~implementation() { std::cout <<"destroying implementation\n"; } voiddo_something() { std::cout <<"did something\n"; } }; voidtest() { boost::shared_ptr<implementation> sp1(newimplementation()); ...
3.shared_ptr 4.weak_ptr 5.scoped_array/shared_array 6.PIMPL技法 1.boost智能指针 智能指针是利用RAII(Resource Acquisition Is Initialization:资源获取即初始化)来管理资源 在构造函数中对资源初始化,在析构函数中对资源释放 ...
#include<memory>#include<iostream>intmain(){std::shared_ptr<int>sharedPtr=std::make_shared<int>(42);std::cout<<"Value: "<<*sharedPtr<<std::endl;return0;} 1. 2. 3. 4. 5. 6. 7. 8. 9. 二、Boost库:探索未知的边界 Boost库,作为一个由社区推动的项目,为C++开发者提供了更多的选择...
scoped_array 轻巧方便,没有给程序增加额外负担,但是 scoped_array 功能有限,不能动态增长,也没有迭代器支持,不能搭配 STL 算法,仅有一个纯粹的“裸”数组接口。在需要动态数组的情况下我们应该使用 std::vector 。例如:boost::shared_ptr 主要特点 boost.smart_ptr 库中最有价值,最重要的组成部分。支持...
常用的boost::shared_ptr函数有: get() 获取裸指针 reset() 计数器减一 另外,boost::shared_ptr可以方便的和std::vector配合,除了不用担心节点的野指针等问题,还有一个比较有意思的功能。 class B : public A { virtual void process(); void do(); ...