weak_ptr Class
包装弱链接的指针。
template<class Ty> class weak_ptr {
public:
typedef Ty element_type;
weak_ptr();
weak_ptr(const weak_ptr&);
template<class Other>
weak_ptr(const weak_ptr<Other>&);
template<class Other>
weak_ptr(const shared_ptr<Other>&);
weak_ptr& operator=(const weak_ptr&);
template<class Other>
weak_ptr& operator=(const weak_ptr<Other>&);
template<class Other>
weak_ptr& operator=(shared_ptr<Other>&);
void swap(weak_ptr&);
void reset();
long use_count() const;
bool expired() const;
shared_ptr<Ty> lock() const;
};
参数
- Ty
弱的指针控件的类型。
备注
模板选件类描述指向资源由一个或多个 shared_ptr Class 对象管理的对象。指向资源的 weak_ptr 对象不会影响该资源的引用计数。因此,那么,当管理该资源销毁的最后一 shared_ptr 对象该资源将释放,因此,即使具有点 weak_ptr 的对象对该资源。这对于避免在数据结构的循环非常重要。
weak_ptr 目标指向资源,如果从拥有该资源的 shared_ptr 对象构造,则为;如果从指向该资源的 weak_ptr 对象构造完成,或者,如果该资源分配给它与 weak_ptr::operator=。weak_ptr 对象不提供直接访问它指向的资源。代码需要使用资源通过拥有该资源的 shared_ptr 对象这样做,创建通过调用成员函数 weak_ptr::lock。weak_ptr 对象已过期,则点时的资源释放的内存,因为所有 shared_ptr 对象拥有该资源被销毁。对过期的 weak_ptr 对象的 lock 创建空的情况对象。
空 weak_ptr 对象不指向任何资源并没有控制块。其成员函数 lock 返回空的情况对象。
当 shared_ptr 对象控件的两个或多个资源保存相互引用 shared_ptr 对象,循环。例如,循环连接表包含三个元素具有头节点 N0;该节点保存拥有下一个节点的一 shared_ptr 对象,N1;该节点保存拥有下一个节点的一 shared_ptr 对象,N2;该节点,接着,该元素包含拥有头节点的一 shared_ptr 对象,N0,关闭循环。在这种情况下,引用计数都不会成为零,因此,在循环的节点不会释放。若要消除循环,最后一个节点 N2 应保存指向 N0 而不是 shared_ptr 对象的一 weak_ptr 对象。因为 weak_ptr 对象拥有 N0 不会影响 N0 引用计数,并在该过程中的最后一对头节点时销毁列表中的节点也将被销毁。
成员
构造函数
构造 weak_ptr。 |
方法
元素的类型。 |
|
如果所有权过期,测试。 |
|
获取资源的独占的所有权。 |
|
返回 true,如果此 weak_ptr 在 (或等提供的指针之前进行排序。 |
|
版本特定资源。 |
|
交换两 weak_ptr 对象。 |
|
计数指定的 shared_ptr 对象数。 |
运算符
replaces 特定资源。 |
要求
标头: <memory>
命名空间: std