C++ unique_ptr参数传递

1.指针的左值引用

std::unique_ptr<...>  up(...);
void func(std::unique_ptr<...> &);
.....
func(up);

2.传递指针或引用参数而不是智能指针

若是您的函数与全部权无关,那么这是首选方法:不要使其彻底采用智能指针。

在这种状况下,您的函数无需担忧谁拥有所指向的对象,或担忧全部权的管理方式,所以传递原始指针既安全又是最灵活的形式,由于不管全部权如何,客户均可以始终产生原始指针(经过调用get方法或从运算符&的地址)。

2.1.传递原始指针(调用get方法)
std::unique_ptr<classX>  up(...);
void func(classX *<...> );
// 调用
func(up.get());
2.2.传递指针指向对象的引用
std::unique_ptr<classX>  up(...);
void func(classX &);
// 调用
func(*up);

3.右值引用,传入std::move后的对象

std::unique_ptr<...>  up(...);
void func(std::unique_ptr<...> );
// 调用
func(std::move(up));

4.return一个unique_ptr,也借用std::move(可省略)

std::unique_ptr<...> func()
{
    std::unique_ptr<...> up(...);
    return up;
}

理论上应该用调用外面加std::move,如下:

std::unique_ptr<..> up = std::move(func());

但是实际上,可以省去move函数,原因是c++11规定,编译器应自动尝试加上move.
https://blog.csdn.net/liji_digital/article/details/116274523
http://www.javashuo.com/article/p-dcrzsmky-gw.html
另外,注意:
智能指针转普通指针问题

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

Contents
滚动至顶部