C++智能指针 shared_ptr与unique_ptr
shared_ptr与unique_ptr的转换关系· 不能将shared_ptr转换为unique_ptr· unique_ptr可以转换为shared_ptr通过std::move常见的使用方式· 将你的函数返回unique_ptr 是一种常见的设计模式这样可以提高代码的复用度因为unique_ptr可以赋值给shared_ptr这样可以随时改变为shared_ptr代码实践#includeiostream// 智能指针头文件#includememory// 自定义类头文件#includeCustomClass.husingnamespacestd;// 创建unique_ptr指针std::unique_ptrCustomClassget_unique_ptr(){std::unique_ptrCustomClasscpstd::make_uniqueCustomClass(unique to shared);returncp;}intmain(){// 创建unique_ptrstd::unique_ptrCustomClasscup1std::make_uniqueCustomClass(unique ptr);// 将unique_ptr赋值给shared_ptrstd::shared_ptrCustomClasscsp1std::move(cup1);std::coutcsp1 use count: csp1.use_count()endl;// func 返回值std::shared_ptrCustomClasscsp2get_unique_ptr();if(csp2){std::coutcsp2 is not nullendl;csp2-cat_info();std::coutcsp2 use count: csp2.use_count()endl;}else{std::coutcsp2 is nullendl;}std::cout----------- END --------------------\n;return0;}打印结果可以看到unique_ptr可以直接赋值给shared_ptr且赋值给 shared_ptr 后内存也会在指针不被指向后进行自动回收