vector — конструктор объекта C ++ с временным объектом в качестве аргумента

Я написал некоторый код, и мне вдруг пришло в голову, что то, что я делаю, может быть действительно плохой идеей. Вот своего рода абстрактный пример. Ключевым моментом является передача по ссылке вектора.

// vector.hpp
class vector {
vector(double x, double y, double z);
}

// particle.hpp
class particle {
particle(const vector& _init_position);
vector m_position;
}

Итак, я написал код для представления class vector, который содержит трехмерный векторный материал, а также записал класс частиц, вектор положения которого можно инициализировать с помощью конструктора и экземпляра вектора.

В моем main() Функция, я использовал временный объект для инициализации объектов частиц, например, так:

int main() {

particle my_particle(vector(0.0, 1.0, 2.0)); // Temp vector instance - problem?
}

Здесь вы можете видеть, что создается временный экземпляр вектора, я предполагаю, что он где-то помещается в стек, а затем вызывается конструктор частицы.

Это нормально или это пример очень плохого кода? Я подозреваю, что последний, так как я передаю по ссылке, и, следовательно, экземпляр временного вектора может быть недействительным?

Надеюсь, кто-нибудь сможет уточнить это?

0

Решение

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

1

Другие решения

Вы не показываете реализацию векторного конструктора, но член является значением, поэтому я предполагаю, что конструктор копирует свой аргумент в член. Если это так, то передача const ref — это именно то, что вы хотите сделать, чтобы избежать ненужных копий.

То, что вы не хотите делать, это держаться за ссылку (или адрес) этого аргумента.

1

По вопросам рекламы [email protected]