C++如何正确使用智能指针?看完这4个点你就明白了( 七 )



cout << w.use_count() << endl; // 1

shared_ptr 内部是利用引用计数来实现内存的自动管理 , 每当复制一个 shared_ptr , 引用计数会+1 。 当一个 shared_ptr 离开作用域时 , 引用计数会-1 。 当引用计数为 0 的时候 , 则 delete 内存 。

同时 , shared_ptr 也支持移动 。 从语义上来看 , 移动指的是所有权的传递 。 如下:

auto w = std::make_shared<Widget>();
auto w2 = std::move(w); // 此时w等于nullptr , w2.use_count()等于1

我们将 w 对象 move 给 w2 , 意味着 w 放弃了对内存的所有权和管理 , 此时 w 对象等于 nullptr 。 而 w2 获得了对象所有权 , 但因为此时 w 已不再持有对象 , 因此 w2 的引用计数为 1 。

C/C++

C/C++

推荐阅读