使用reset()方法将其指向一个空指针: 代码语言:cpp 复制 boost::shared_ptr<MyObject>ptr(newMyObject());ptr.reset(); 将boost::shared_ptr赋值给一个空的boost::shared_ptr: 代码语言:cpp 复制 boost::shared_ptr<MyObject>ptr(newMyObject());boost::shared_ptr<MyObject>emptyPtr;ptr=emptyPtr; ...
上面调用了两上shared_ptr的成员方法,user_count()的作用是获得当前对象被引用的次数,reset()的作用是释放指针对对象的引用,将指针设为空。 2. boost::shared_ptr的实现机制 boost::shared_ptr的实现机制其实比较简单,就是对指针引用的对象进行引用计数,当有一个新的boost::shared_ptr指针指向一个对象时,就把该...
一种用法是将容器作为shared_ptr管理的对象,如shared_ptr<list<T> >,使容器可以被安全地共享,用法与普通shared_ptr没有区别,我们不再讨论。 另一种用法是将shared_ptr作为容器的元素,如vector<shared_ptr<T> >,因为shared_ptr支持拷贝语义和比较操作,符合标准容器对元素的要求,所以可以实现在容器中安全地容纳元素...
尤其是shared_ptr<T>隐式转换成shared_ptr<T const>、shared_ptr<U>(类型U是类型T的可访问基类)、shared_ptr<void>。 shared_ptr 在C++11标准上被命名为 std::shared_ptr。 随着boost 1.53版本,shared_ptr 可以存储动态分配的数组,可以使用数组类型(T[]/T[N])作为模版参数。使用不定数量当数组T[]和一定...
boost::shared_ptr是可以共享所有权的智能指针,shared_ptr与scoped_ptr一样包装了new操作符在堆上分配的动态对象,但它实现的是引用计数型的智能指针,可以被自由地拷贝和赋值,boost::shared_ptr的管理机制其实并不复杂,就是对所管理的对象进行了引用计数,当新增一个boost::shared_ptr对该对象进行管理时,就将该对象...
3.shared_ptr 4.weak_ptr 5.scoped_array/shared_array 6.PIMPL技法 1.boost智能指针 智能指针是利用RAII(Resource Acquisition Is Initialization:资源获取即初始化)来管理资源 在构造函数中对资源初始化,在析构函数中对资源释放 ...
常用的boost::shared_ptr函数有: get() 获取裸指针 reset() 计数器减一 另外,boost::shared_ptr可以方便的和std::vector配合,除了不用担心节点的野指针等问题,还有一个比较有意思的功能。 class B : public A { virtual void process(); void do(); ...
boost::intrusive_ptr和shared_ptr的区别 shared_ptr最大的陷阱就是用同一个裸指针创建了多个shared_ptr,这会导致这些shared_ptr析构时,因为每个shared_ptr都有自己引用计数,导致这个裸指针多次销毁 所以不能用一个裸指针来创建多个shared_ptr,但却可以来创建多个intrusive_ptr,因为所使用的对象通过继承包含引用计数功...
shared_ptr的reset()函数的行为与scoped_ptr不尽相同,它的作用是将引用计数减1,停止对指针的共享,除非引用计数为0,否则不会发生删除操作。带参数的reset()函数类似相同形式的构造函数,在原指针引用计数减1的同时改为管理另一个指针。 shared_ptr有两个专门的函数来检查引用计数:unique()在shared_ptr是指针的唯一...
boost::weak_ptr 主要特点 weak_ptr 被设计为与 shared_ptr 共同工作,可以从一个 shared_ptr 或者另一个 weak_ptr 对象构造,获得资源的观测权。但是 weak_ptr 没有共享资源,它的构造不会引起指针引用计数的增加,同时,在析构的时候也不回引起引用计数的减少。具体用法 shared_ptr有个致命缺陷,循环引用不...