将对象传递给函数时,是否适用于智能指针与其他包含动态内存的对象相同的规则?
例如,当我将 a 传递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);
现在这与智能指针的逻辑相同吗?我什么时候应该考虑移动语义?一些关于我应该如何传递智能指针的指南是我最想要的。