【发布时间】:2012-09-13 05:50:49
【问题描述】:
将对象传递给函数时,是否适用于智能指针和其他包含动态内存的对象一样的规则?
例如,当我将std::vector<std::string> 传递给函数时,我总是会考虑以下选项:
-
我要更改矢量对象的状态,但我不希望在函数完成后反映这些更改,AKA 复制。
void function(std::vector<std::string> vec); -
我要更改矢量对象的状态,并且我确实希望在函数完成后反映这些更改,AKA 做一个参考。
void function(std::vector<std::string> & vec); -
这个对象很大,所以我最好传递一个引用,但是告诉编译器不要让我改变它。
void function(std::vector<std::string> const& vec);
现在这与智能指针的逻辑相同吗?我什么时候应该考虑移动语义?一些关于我应该如何传递智能指针的指南是我最想要的。
【问题讨论】:
-
unique_ptr不可复制,您必须手动进行复制。std::unique_ptr<T>(mew T(*otherptr));除此之外应该和向量一样。 -
“移动语义是怎么回事?”这是一个完全不同的问题,已经被提出并回答了。
标签: c++ c++11 parameter-passing smart-pointers unique-ptr