верхний уровень const с указателями - PullRequest
0 голосов
/ 08 февраля 2019

Предположим, у меня есть класс, который имеет std::vector<Object*>

Должен ли метод типа:

const std::vector<Object*> getSth() const
{
    return class_member_vector;
}

быть преобразован в:

std::vector<Object*> getSth() const
{
    return class_member_vector;
}

Это всегда безопасно ивсегда следует исправлять таким образом?

1 Ответ

0 голосов
/ 09 февраля 2019

Да, вы должны использовать второй вариант для ясности.И да, это всегда безопасно.В обоих вариантах вы возвращаете возвращаемое значение значением , поэтому на класс нельзя повлиять путем изменения возвращаемого вектора.Также в обоих случаях вызываемый абонент может изменить объекты, на которые указывают элементы вектора, поэтому внешний const также не имеет значения.

const в первом варианте вводит в заблуждение и должен бытьудалено.

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

...