При передаче объектов в функции применяются те же правила к интеллектуальным указателям, что и к другим объектам, которые содержат динамическую память?
Когда я передаю, например, std::vector<std::string>
в функцию, я всегда рассматриваю следующие параметры:
-
Я собираюсь изменить состояние векторного объекта, но я не хочу, чтобы эти изменения отражались после завершения функции, AKA создает копию.
void function(std::vector<std::string> vec);
-
Я собираюсь изменить состояние векторного объекта, и я do хочу, чтобы эти изменения отражались после завершения функции, AKA делает ссылку.
void function(std::vector<std::string> & vec);
-
Этот объект довольно большой, поэтому мне лучше передать ссылку, но скажите компилятору, чтобы он не менял.
void function(std::vector<std::string> const& vec);
Теперь это та же логика с умными указателями? И когда я должен рассматривать семантику перемещения? Некоторые рекомендации о том, как я должен передавать интеллектуальные указатели, - это то, что я больше всего желаю.