Итак, я довольно опытный программист на C, которому приходится много программировать на C++. В языке есть некоторые тонкости, в которых я никогда не чувствовал себя уверенным. Например, лучшие методы передачи аргументов.
Предположим, например, что у меня есть класс черного ящика с именем Object (у него может быть много переменных-членов, насколько нам известно) и функция fn, которая принимает вектор экземпляров Object в качестве аргумента. Мне кажется, что есть четыре основных способа прохождения этого:
void fn(vector<Object> vec);
void fn(vector<Object*> vec);
void fn(vector<Object> *vec);
void fn(vector<Object> &vec);
И, конечно же, мы могли бы также взять некоторую комбинацию этих функций.
Я хочу убедиться, что у меня есть это прямо:
Метод 1 скопирует векторный класс, включая копию каждого экземпляра объекта в векторе. Это потенциально может быть огромной перегрузкой и, следовательно, плохо.
(в этом я не уверен) Метод 2 скопирует все переменные метода vec, но скопирует только адреса каждого из экземпляров объекта. Я недостаточно знаю о том, что содержится в векторном классе, чтобы понять, целесообразно это или нет.
Методы 3 и 4 довольно просты и похожи друг на друга и требуют минимальных накладных расходов.
Все это правильно? и какой метод предпочтительнее, учитывая, что мы ничего не знаем о классе Object?
const
:void fn(const vecctor<Object>& vec);
. - person juanchopanza   schedule 06.08.2013