Как вернуть векторный объект?

0

Я смущен, чтобы вернуть векторный объект. Поэтому, пожалуйста, направляйте меня. Благодарю.

Мой код:

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?

}
  • 0
    Как он мог вернуть «адрес этого объекта» ?? Тип адреса является типом указателя, а возвращаемый тип функции не является типом указателя.
  • 0
    Извините, я хотел сказать, что ссылка на объект не адрес ..
Теги:
pointers
visual-c++
vector
stdvector

1 ответ

4
Лучший ответ

Нет, это не правильно. Getxyz() возвращает временный. Вы можете push_back элемент для этого временного, но это не повлияет на xyz потому что это просто копия этого объекта. Если вы хотите иметь возможность мутировать xyz, вам нужно вернуть ссылку:

std::vector<Vector3D>& Getxyz();
  • 0
    Таким образом, вы имеете в виду, что возвращение ссылки на объект не является копией этого объекта, и все операции допустимы, такие как p-> Getxyz (). Clear (), p-> Getxyz (). Push_back и т. Д. На самом деле я просто хочу вернуть тот же объект не копия этого объекта.
  • 0
    @furqan Да, ссылка возвращает тот же объект. Копирование не производится.
Показать ещё 8 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню