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 引用计数,并在该过程中的最后一对头节点时销毁列表中的节点也将被销毁。

成员

Bb982126.collapse_all(zh-cn,VS.110).gif构造函数

weak_ptr::weak_ptr

构造 weak_ptr。

Bb982126.collapse_all(zh-cn,VS.110).gif方法

weak_ptr::element_type

元素的类型。

weak_ptr::expired

如果所有权过期,测试。

weak_ptr::lock

获取资源的独占的所有权。

weak_ptr::owner_before

返回 true,如果此 weak_ptr 在 (或等提供的指针之前进行排序。

weak_ptr::reset

版本特定资源。

weak_ptr::swap

交换两 weak_ptr 对象。

weak_ptr::use_count

计数指定的 shared_ptr 对象数。

Bb982126.collapse_all(zh-cn,VS.110).gif运算符

weak_ptr::operator=

replaces 特定资源。

要求

标头: <memory>

命名空间: std

请参见

参考

shared_ptr Class

其他资源

memory 成员