Предположим, что у вас есть следующий код:
int main(int argc, char** argv) {
Foo f;
while (true) {
f.doSomething();
}
}
Какая из следующих двух реализаций Foo предпочтительнее?
Решение 1:
class Foo {
private:
void doIt(Bar& data);
public:
void doSomething() {
Bar _data;
doIt(_data);
}
};
Решение 2:
class Foo {
private:
Bar _data;
void doIt(Bar& data);
public:
void doSomething() {
doIt(_data);
}
};
В простом английском: если у меня есть класс с методом, который вызывается очень часто, и этот метод определяет значительное количество временных данных (либо один объект сложного класса, либо большое количество простых объектов), должен Я объявляю эти данные как частные члены класса?
С одной стороны, это сэкономит время, затрачиваемое на создание, инициализацию и разрушение данных для каждого вызова, что повысит производительность. С другой стороны, он попирает принцип "частный член = состояние объекта" и может затруднить понимание кода.
Ответ зависит от размера/сложности класса Bar? Как насчет количества объявленных объектов? В какой момент выгоды перевесят недостатки?