Да, вы должны использовать второй вариант для ясности.И да, это всегда безопасно.В обоих вариантах вы возвращаете возвращаемое значение значением , поэтому на класс нельзя повлиять путем изменения возвращаемого вектора.Также в обоих случаях вызываемый абонент может изменить объекты, на которые указывают элементы вектора, поэтому внешний const
также не имеет значения.
const
в первом варианте вводит в заблуждение и должен бытьудалено.
Но вы можете рассмотреть возможность возврата ссылки const std::vector<Object*>&
по соображениям производительности.Это зависит от вашей модели использования класса (например, время жизни, область действия), является ли это хорошей идеей или нет.По производительности рекомендуется возвращаться по константной ссылке, поскольку все контейнеры STL делают глубокие копии, которые довольно дороги.