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)
你不需要打电话get,只需要取消引用:
doSomething(*unique);
Run Code Online (Sandbox Code Playgroud)
最好传递对存储对象std::unique_ptr的引用,而不是通过引用传递,因为对象的生存期和存储不需要使用该对象传递给每个函数.
在解除引用指针时,标准库智能指针应该像原始指针一样使用.也就是说,你只需使用
std::unique_ptr<Test> unique(new Test());
std::cout << unique->message << " John.\n";
doSomething(*unique);
Run Code Online (Sandbox Code Playgroud)
我包括声明以显示简化用法和一个输出以强调不使用std::endl.