所以他是孤立,这点从他的名字上也可以见到。scope:作用地域,领域。来开了就没有了。同时在领域内所有权又独占!!
shared_ptr:可以把weak_ptr转化成(赋值给)shared_ptr:而且这种赋值不会导致weak_ptr的引用计数增加。 而仅仅是把weak_ptr的引用计数赋给shared_ptr的引用计数。
也可以把shared_ptr转化成(赋值给)weak_ptr。而且这种赋值不会导致shared_ptr的引用计数增加。 而仅仅是把shared_ptr的引用计数赋给weak_ptr的引用计数。
shared_ptr<int> pi1(new int910));
int *p1=pi1.get();
pi1=p1;//error..
weak_ptr<int> wp=weak_ptr<int>( pi1.get() );
pi1 = wp;//ok
认识weak_ptr的好方法就是认为 他和一般的指针没有区别,还有就是他没有删除它能访问的动态分配的空间的能力。它存在的目的是 他让 pi1 = wp;//ok 可以进行。
因为在智能指针领域内:
智能指针<Type> 指向Type的智能指针对象 ;
Type * p= new Type;
指向Type的智能指针对象 = p 是错误的!
综上:shared_ptr ,和 weak_ptr对象可以互相赋值。scoped_ptr是孤立的!
weak_ptr无权释放他能访问的动态分配的空间。
所以:
main(){ weak_ptr<int> wp(new int(10) );}将会导致内存泄露
main()
{ weak_ptr<int> wp(new int(10) );
shared_ptr<int> sp=wp;//不会改变引用计数
}//不会有内存泄露
//关于什么情况下转换可以进行可以参看boot源代码。
以上的东西。是我看了网站上的文章和阅读了几分钟的代码得到的。应该有地方不正确,如果您发现了请给我留言