void func(list<*myClass> myList);
Этот вызов копирует аргумент и создает новый список.Любая модификация в этой копии не будет отражена в вызывающем аргументе.
void func(list<*myClass>& myList);
Этот вызов не копирует аргумент.Любая модификация списка будет отражена в исходном списке (поскольку он его использует), поскольку аргумент ссылается на этот список.
void func(const list<*myClass>& myList);
В общем, люди используют const list<*myClass>&
, чтобы избежать копирования и запретитьмодификации.
void func(list<myClass>* myList);
Я предполагаю, что это вопрос, который вы хотели задать вместо list<*myClass>
.Так что это передает указатель вместо ссылки.Это означает, что myList
может не существовать, в отличие от ссылки, которая должна ссылаться на существующий объект.Это часто используется для необязательных аргументов.
void func(list<myClass> myList);
Видимо, я ошибся, и это реальное сравнение.
Это просто еще один объект, нет способа конвертировать list<myClass>
в list<*myClass>
.Список указателей может быть интересен, если myClass
является виртуальным, если они управляются где-либо еще.
Таким образом, разница между двумя вызовами заключается в основном в том, как вы обрабатываете объекты, либо по значению, потому что вы хотите, чтобы объектысами в списке (и да, вы хотите передать их по ссылке) или вы хотите просто список указателей (но вы все равно должны передавать их по ссылке или константной ссылке, почти никогда по значению, за исключением случаев, когда вам нужна копиясписок для изменения).