C++11 理解 (二十三) 之 通用智能指针

这些指针是由 TR1 智能指针演变而来。注意! 智能指针是类型而非一般指针。

shared_ptr 是一引用计数 (reference-counted) 指针,其行为与一般 C++ 指针即为相似。在 TR1 的实现中,缺少了一些一般指针所拥有的特色,像是别名或是指针运算。C++11新增前述特色。

一个 shared_ptr 只有在已经没有任何其它 shared_ptr 指向其原本所指向对象时,才会销毁该对象。

一个 weak_ptr 指向的是一个被 shared_ptr 所指向的对象。该 weak_ptr 可以用来决定该对象是否已被销毁。weak_ptr 不能被解参考; 想要访问其内部所保存的指针,只能通过 shared_ptr。有两种方法可达成此目的。第一,类型 shared_ptr 有一个以 weak_ptr 为参数的构造函数。第二,类型 weak_ptr 有一个名为 lock 的成员函数,其返回值为一个 shared_ptrweak_ptr 并不拥有它所指向的对象,因此不影响该对象的销毁与否。

底下是一个 shared_ptr 的使用样例:

int main( )
{
    std::shared_ptr<double> p_first(new double) ;
 
    {
        std::shared_ptr<double> p_copy = p_first ;
 
        *p_copy = 21.2;
 
    }  // 此時 'p_copy' 會被銷毀,但動態分配的 double 不會被銷毀。
 
    return 0;  // 此時 'p_first' 會被銷毀,動態分配的 double 也會被銷毀 (因為不再有指針指向它)。
}

auto_ptr 将会被 C++ 标准所废弃,取而代之的是 unique_ptr。 unique_ptr 提供 auto_ptr 大部份特性,唯一的例外是 auto_ptr 的不安全、隐性的左值搬移。不像 auto_ptrunique_ptr 可以存放在 C++11 提出的那些能察觉搬移动作的容器之中。


C++98 定义的唯一的智能指针类 auto_ptr 已经被弃用,C++11 引入了新的智能针对类 shared_ptr 和 unique_ptr。它们都是标准库的其它组件兼容,可以安全地把智能指针存入标准容器,也可以安全地用标准算法“倒腾”它们。

你可能感兴趣的:(C++11 理解 (二十三) 之 通用智能指针)