std::unique_ptr作为参数传入函数

发布于 2021-09-19  2,126 次阅读


  以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;
}