C++在函数参数上传递std :: unique_ptr对象作为引用的正确方法

Men*_*des 3 c++ unique-ptr c++11

我有一个std::unique_ptr<T>对象和一个库函数T&作为参数.此功能将更改T对象数据.

传递std::unique_ptr<T>给该函数的更好方法是什么?以上代码是否正确?有更好的方法吗?

#include <iostream>
#include <string>
#include <memory>

class Test {

   public: 
       std::string message = "Hi";
};

void doSomething(Test& item)
{
    item.message = "Bye";
}

int main()
{
     std::unique_ptr<Test> unique = std::unique_ptr<Test>(new Test());

     std::cout << unique->message << " John." << std::endl;

     doSomething(*unique.get());

     std::cout << unique->message << " John." << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

Tar*_*ama 8

你不需要打电话get,只需要取消引用:

doSomething(*unique);
Run Code Online (Sandbox Code Playgroud)

最好传递对存储对象std::unique_ptr的引用,而不是通过引用传递,因为对象的生存期和存储不需要使用该对象传递给每个函数.


Die*_*ühl 5

在解除引用指针时,标准库智能指针应该像原始指针一样使用.也就是说,你只需使用

std::unique_ptr<Test> unique(new Test());
std::cout << unique->message << " John.\n";
doSomething(*unique);
Run Code Online (Sandbox Code Playgroud)

我包括声明以显示简化用法和一个输出以强调不使用std::endl.