I've written some code and it suddenly occurred to me that what I'm doing might be a really bad idea. Here is a sort of abstract example. The key point is the passing by reference of the vector.
// vector.hpp
class vector {
vector(double x, double y, double z);
}
// particle.hpp
class particle {
particle(const vector& _init_position);
vector m_position;
}
So I have written some code to represent a class vector
, which contains 3D vector stuff, and have also written a particle class, the position vector of which can be initialized with the constructor and a vector instance.
In my main()
function, I was using a temporary object to initialize particle objects, like so:
int main() {
particle my_particle(vector(0.0, 1.0, 2.0)); // Temp vector instance - problem?
}
Here you can see that a temporary vector instance is created, I assume it is placed on the stack somewhere, and then the constructor of particle is called.
Is this okay or is it an example of very bad code? I suspect the latter, as since I am passing by reference, and therefore the instance of the temp vector might not be valid?
Hopefully someone can clarify this?
You are permitted to pass a temporary object to a function as either a value or const reference parameter. It is a good thing, as you can save copies when passing by const reference.