以unique_ptr作为参数传入、传出函数时,有以下两种做法:一是传引用;二是移交所有权。但注意,移交所有权到函数后,如果不在函数中析构ptr,那就一定需要取回它,否则内存泄漏。
#include <iostream>
#include <memory>
int asRef(std::unique_ptr<int>& p)
{
(*p)++;
return *p;
}
std::unique_ptr<int> asOwner(std::unique_ptr<int> p)
{
(*p)++;
return p;
}
int main()
{
// 创建初始ptr
std::unique_ptr<int> ptr = std::make_unique<int>(10);
// 1 传引用
std::cout << asRef(ptr) << std::endl;
// 2 移交所有权
/*
作为参数传入时release
一定要取得返回值,否则内存泄漏
*/
ptr = asOwner(std::unique_ptr<int> (ptr.release()));
std::cout << *ptr << std::endl;
return 0;
}
Comments | NOTHING