オブジェクトを関数に渡すとき、動的メモリを含む他のオブジェクトと同じ規則がスマート ポインターに適用されますか?
たとえば、std::vector<std::string>
関数に a を渡すときは、常に次のオプションを検討します。
ベクトル オブジェクトの状態を変更するつもりですが、関数の終了後にそれらの変更を反映させたくありません。つまり、コピーを作成します。
void function(std::vector<std::string> vec);
ベクトル オブジェクトの状態を変更するつもりです。これらの変更は、関数が終了した後に反映される必要があります。つまり、参照を作成します。
void function(std::vector<std::string> & vec);
このオブジェクトは非常に大きいので、参照を渡したほうがよいのですが、コンパイラに変更を許可しないように指示してください。
void function(std::vector<std::string> const& vec);
これはスマート ポインターと同じロジックですか? そして、いつ移動セマンティクスを考慮する必要がありますか? スマート ポインターを渡す方法に関するガイドラインは、私が最も望んでいるものです。