C++:共享指针shared_ptr的理解与应用 - 知乎 (zhihu.com) 手写shared_ptr, weak_ptr, unique_ptr - 知乎 (zhihu.com) get()函数,表示返回当前存储的指针 use_count()函数,表示当前引用计数 reset()函数,表示重置当前存储的指针 *operator,表示返回对存储指针指向的对象的引用。它相当于:* get()。 operator-...
weak_ptr<int> weak1 = sptr; sptr.reset(new int); *sptr = 5; weak_ptr<int> weak2 = sptr; // weak1 is expired! if(auto tmp = weak1.lock()) cout << *tmp << '\n'; else cout << "weak1 is expired\n"; // weak2 points to new data (5) if(auto tmp = weak2.lock...
up6.reset(up7.release()); weak_ptr weak_ptr一般和shared_ptr配合使用。它可以指向shared_ptr所指向的对象,但是却不增加对象的引用计数。这样就有可能出现weak_ptr所指向的对象实际上已经被释放了的情况。因此,weak_ptr有一个lock函数,尝试取回一个指向对象的shared_ptr。 1 2 3 4 5 6 7 cout<<"test w...
weak_ptr本身也是一个模板类,但是不能直接用它来定义一个智能指针的对象,只能配合shared_ptr来使用,可以将shared_ptr的对象赋值给weak_ptr,并且这样并不会改变引用计数的值。查看weak_ptr的代码时发现,它主要有lock、swap、reset、expired、operator=、use_count几个函数,与shared_ptr相比多了lock、expired函数,但是...
weak_ptr<int>p(pi);cout<< pi.use_count() <<endl; pi.reset(); pi2.reset();if(p.expired())cout<<"weak_ptr过期"<<endl; }//3. reset():将该弱引用指针设置为空,不影响该对象的强引用数量,但是指向该对象的弱引用会减少1voidfunc3(){autopi = make_shared<int>(100);autopi2(pi); ...
weak_ptr<aircraft>myWingMan; voidFly() { cout<<"Aircraft type"<<m_model<<"is flying !"<<endl; } Aircraft(stringmodel) { m_model=model; cout<<"Aircraft type "<<model<<" is created"<<endl; } Aircraft() { m_model="Generic Model"; ...
重载一个unique_ptr中的删除器会影响到unique_ptr类型以及如何构造(或reset)该类型的对象 12.1.6 weak_ptr weak_ptr是一种不控制所指向对象生存期的智能指针,它指向一个shared_ptr管理的对象 ...
weak_ptr<aircraft> myWingMan; void Fly() { cout << "Aircraft type" << m_model << "is flying !" << endl; } Aircraft(string model) { m_model = model; cout << "Aircraft type " << model << " is created" << endl;
va[i].reset(newAsteroid(weak_ptr(va[neighbor])); launch(i); } // … } reset() 可以让一个shared_ptr指向另外一个新的对象。 当然,我对ower类作了相当大的简化,并且只给了每个星星一个邻居。这里的关键是,我们使用了weak_ptr指向其邻居星星。在计算相反状态的时 候,ower类则使用shared_ptr来代表星...
std::weak_ptr<int>weak1=sptr; // deletes managed object, acquires new pointer sptr.reset(newint); *sptr=5; // get pointer to new data without taking ownership std::weak_ptr<int>weak2=sptr; // weak1 is expired! if(autotmp=weak1.lock()) ...