我有一个std::unique_ptr
对象和一个库函数T&
作为参数.此功能将更改T
对象数据.
传递std::unique_ptr
给该函数的更好方法是什么?以上代码是否正确?有更好的方法吗?
#include#include #include class Test { public: std::string message = "Hi"; }; void doSomething(Test& item) { item.message = "Bye"; } int main() { std::unique_ptr unique = std::unique_ptr (new Test()); std::cout << unique->message << " John." << std::endl; doSomething(*unique.get()); std::cout << unique->message << " John." << std::endl; }
TartanLlama.. 8
你不需要打电话get
,只需要取消引用:
doSomething(*unique);
最好传递对存储对象std::unique_ptr
的引用,而不是通过引用传递,因为对象的生存期和存储不需要使用该对象传递给每个函数.
你不需要打电话get
,只需要取消引用:
doSomething(*unique);
最好传递对存储对象std::unique_ptr
的引用,而不是通过引用传递,因为对象的生存期和存储不需要使用该对象传递给每个函数.
在解除引用指针时,标准库智能指针应该像原始指针一样使用.也就是说,你只需使用
std::unique_ptrunique(new Test()); std::cout << unique->message << " John.\n"; doSomething(*unique);
我包括声明以显示简化用法和一个输出以强调不使用std::endl
.