Нет правильного ответа. Ответ будет зависеть от контекста, которого у нас в настоящее время очень мало.
Это зависит от клиентов вашего класса. В большинстве ситуаций вы не хотели бы, чтобы случайный инспектор изменял состояние объекта, поэтому в определенной степени лучше возвращать ссылку на const
объект. Однако в таком случае я бы также сделал функцию const
, т.е.
/* a design const - this accessor does not change the state */
const vector<int> & GetPointsVector() const;
Это также эффективно, поскольку вы не передаете тяжелые объекты в качестве возвращаемых значений (это другой вопрос, что большинство компиляторов делают RVO в наши дни).
Если ваш клиент должен использовать вектор в алгоритмах, да, вам лучше предоставить итераторы. Но две пары, т.е.
typedef vector<int>::iterator _MyItr;
_MyItr begin() const;
_MyItr begin();
_MyItr end() const;
_MyItr end();
Это соответствует способу разработки STL. Но будьте осторожны при указании того, какого рода итератор может ожидать клиент (например: если спецификация класса говорит, что возвращаемые итераторы RandomIterators
, это устанавливает определенное ожидание для вашей реализации).