谈谈这个weak_ptr
参加面试的时候面试官让我讲讲对C++智能指针的认识。其中我对shared_ptr跟unique_ptr两个还好,因为使用比较熟悉,原理跟实现上都还可以,但是对weak_ptr没具体使用过,只记得它的概念,所以回答得不好。所以就整理一下这个weak_pt的使用。
有一句话说的很好,“weak_ptr就像观测者那样观测资源的使用情况”。
首先,weak_ptr是配合shared_ptr的使用,weak_ptr可以用shared_ptr来赋值,但当它引用shared_ptr时并不会引起它的计数,
另外,weak_ptr并没有重载解引用等操作符,也不单独使用(不能单独使用的原因是,weak_ptr没有重载解引用*、->运算符,也就是说它只能访问但不能修改)。
使用expired()检查weak_ptr的引用情况(expired()==true时表示资源已被释放),使用lock()获取一个shared_ptr的对象。
weak_ptr的经典应用场景:shared_ptr的成环问题。
class A;
class B {
private:
shared_ptr<A> ptr2A;
public:
B() {
cout << "B constructing." << endl;
}
~B() {
cout << "B destroying." << endl;
}
void set_ptr(shared_ptr<A>& p) {
ptr2A = p;
}
};