У меня есть класс foo
, который управляет vector
из float
с фиксированной длиной и некоторыми метаданными. Я реализовал наивную перегрузку для оператора *:
constexpr int numOfElements = 9;
class foo {
public:
foo()
: x(0), y(0), data(numOfElements)
{}
foo operator*(float value) {
foo result;
for (size_t k = 0; k < this->data.size(); ++k)
result.data[k] = this->data[k] * value;
return result;
}
int x;
int y;
std::vector<float> data;
};
позже я использую его следующим образом:
some_foo = *ptr_to_another_foo * 5;
где some_foo
и ptr_to_another_foo
были определены в другом месте и содержат некоторые значения. Это вычисляет правильный результат. Однако result foo
в перегруженном операторе создает другой объект, который вызывает выделение памяти, что неприемлемо из соображений производительности. Поскольку some_foo
уже имеет память, выделенную для data
, есть ли способ реализовать перегруженный оператор таким образом, чтобы память some_foo.data
s использовалась вместо выделения временной foo result
?
Я всегда мог бы реализовать C-подобную функцию умножения на основе указателя, но я хотел бы сделать что-то более идиоматичное в C++.