本次主要是补充一下智能指针章节的遗漏部分——weak_ptr指针
weak_ptr是C++11中引入的一种智能指针,它的作用就是配合shared_ptr对资源进行管理。由于weak_ptr设计的作用就是配合shared_ptr,因此其是一种“弱引用”,本身并不会增加所指对象的引用计数,也不会影响所指对象的生命周期。
weak_ptr通常用于解决shared_ptr的循环引用问题。当两个或者更多shared_ptr互相引用时,会形成一个循环引用,类似死锁的一种产生方式,此时会导致所指向对象无法被释放,从而产生内存泄漏。这时我们可以使用weak_ptr破除循环引用,将其中一个shared_ptr转换为weak_ptr,使得它不在持有该对象的所有权,从而避免内存泄漏。
使用weak_ptr时,需要用到weak_ptr中lock()函数,该函数可以获取一个shared_ptr对象,如果此时weak_ptr指向的对象已经被销毁,lock函数会返回一个空的shared_ptr对象。
下面给出一个使用weak_ptr的示例:
class B {
public:
B(int value) : value_(value)
{}
int getValue() const
{
return value_;
}
private:
int value_;
};
class A {
public:
void setB(shared_ptr b)
{
pb_ = b;
}
void doSomething()
{
if (auto p = pb_.lock())//看shared_ptr对象是否被销毁
cout getValue() pb_;
};
int main() {
shared_ptr pa = make_shared();//先创建对象A和B
shared_ptr pb = make_shared(42);
pa->setB(pb);//将对象B传递给A(这里使用weak_ptr传递)
pa->doSomething();
pb.reset();//对B对象计数器--,变为0,直接销毁
pa->doSomething();
return 0;
}
此时输出结果:
以上就是weak_ptr的基本使用方法,也是为了补充上章没有总结到的一些知识点。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
相关推荐: NVIDIA Maxine Video Effects SDK 編程指南 – 实践小记
NVIDIA Maxine Video Effects SDK 編程指南 – 实践小记 本篇博客重点只说Video Effect的部分,此外还有Audio Effect的部分、还有AR部分,不在本篇范围内。本文由重庆Debug原创 NVIDIA Maxine …