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

auto w = std::make_unique<Widget>();
auto w2 = std::move(w); // w2获得内存所有权 , w此时等于nullptr

unique_ptr 代表的是专属所有权 , 如果想要把一个 unique_ptr 的内存交给另外一个 unique_ptr 对象管理 。 只能使用 std::move 转移当前对象的所有权 。 转移之后 , 当前对象不再持有此内存 , 新的对象将获得专属所有权 。

如上代码中 , 将 w 对象的所有权转移给 w2 后 , w 此时等于 nullptr , 而 w2 获得了专属所有权 。

C/C++

C/C++

性能

因为 C++的 zero cost abstraction 的特点 , unique_ptr 在默认情况下和裸指针的大小是一样的 。 所以内存上没有任何的额外消耗 , 性能是最优的 。

使用场景 1:忘记 delete

推荐阅读