weak_ptr 类

环绕弱链接指针。

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 类 对象管理的对象。 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 对象时,控件的两个或更多个资源存储相互引用 shared_ptr 对象,因此如果发生循环。 例如,具有三个元素的循环链接列表具有头节点 N0;该节点包含的节点下的 shared_ptr 对象,N1;该节点包含的节点下的 shared_ptr 对象,N2;该节点,因此,持有自己头节点的 shared_ptr 对象中,N0,请关闭时间。 在这种情况下,引用计数不会变成零,并且,在循环的节点不会被释放。 若要消除循环,最后一个 N2 节点应保存指向 N0 代替 shared_ptr 对象的 weak_ptr 对象。 因为 weak_ptr 对象拥有 N0 不影响 N0 引用计数,并且,当销毁,到头节点的程序的最后一个引用也将会在列表的节点。

成员

构造函数

weak_ptr::weak_ptr

构造 weak_ptr。

方法

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 对象的数目。

运算符

weak_ptr::operator=

replaces 的资源。

要求

页眉: <内存>

命名空间: std

请参见

参考

shared_ptr 类

其他资源

memory 成员