Я смущен, чтобы вернуть векторный объект. Поэтому, пожалуйста, направляйте меня. Благодарю.
Мой код:
struct Vector3D
{
float x, y, z;
};
class Vertex
{
public:
std::vector<Vector3D> xyz;
std::vector<Vector3D> Getxyz()
{
return xyz; // what it returns? reference or copy of this object.
}
Vector3D& getVec(int i)
{
return this->xyz[i]; // is it OK?
}
void addVec(Vector3D p)
{
this->xyz.push_back(p);
}
};
void Somefunction()
{
Vertex* p = new Vertex;
p->Getxyz().push_back(Vector3D(0,0,0)); // 1. is it valid and correct?
Vector3D vec = p->getVec(0); // 2. is it valid and correct?
}
Нет, это не правильно. Getxyz()
возвращает временный. Вы можете push_back
элемент для этого временного, но это не повлияет на xyz
потому что это просто копия этого объекта. Если вы хотите иметь возможность мутировать xyz
, вам нужно вернуть ссылку:
std::vector<Vector3D>& Getxyz();