En general, es una buena idea utilizar punteros cuando sea necesario, pero referencias u objetos alternativamente objetos (piense en valores) cuando sea posible.
Primero necesita saber si gVector3
cumple con los requisitos de los contenedores estándar, es decir, si el tipo gVector3
se puede copiar y asignar. Es útil si gVector3
también es construible por defecto (vea la nota de ACTUALIZACIÓN a continuación). Suponiendo lo hace, entonces usted tiene dos opciones, almacenar objetos de gVector3
directamente en std::vector
std::vector<gVector3> points;
points.push_back(gVector(1, 2, 3)); // std::vector will make a copy of passed object
o es propietario de creación (y también la destrucción) de gVector3
objetos manualmente.
std :: puntos vectoriales; points.push_back (nuevo gVector3 (1, 2, 3)); // ...
Cuando la matriz points
ya no es necesaria, recuerde hablar de todos los elementos y llamar al operador delete
.
Ahora, es su elección si puede manipular gVector3
como objetos (puede suponer que los considera valores u objetos de valor) porque (si, consulte la condición anterior) gracias a la disponibilidad del constructor de copias y al operador de asignación las siguientes operaciones son posibles:
gVector3 v1(1, 2, 3);
gVector3 v2;
v2 = v1; // assignment
gVector3 v3(v2); // copy construction
o si lo desea o necesita asignar objetos de gVector3
en de almacenamiento dinámico utilizando nuevo operador. Es decir, puede querer o necesitar administrar la vida de esos objetos por su cuenta.
Por cierto, es posible que también se pregunta When should I use references, and when should I use pointers?
ACTUALIZACIÓN: Aquí está la explicación de la nota sobre la constructibilidad por defecto. Gracias a Neil por señalar que inicialmente no estaba claro. Como Neil notó correctamente, no es requerido por el estándar C++, sin embargo, señalé esta característica porque es importante y útil. Si el tipo de T
no es construible por defecto, lo que no es requerido por la norma de C++, entonces el usuario debe ser consciente de los problemas potenciales que trato de ilustrar a continuación:
#include <vector>
struct T
{
int i;
T(int i) : i(i) {}
};
int main()
{
// Request vector of 10 elements
std::vector<T> v(10); // Compilation error about missing T::T() function/ctor
}
copias de memoria son el mayor impacto. Insignificante si estás hablando de tres entradas. – pestilence669
@mloskot: si se hubiera molestado en verificar, habría visto que Alice solo ha hecho cuatro preguntas y aceptado las respuestas de las otras tres. Entonces, ella sabe claramente cómo funciona SO y, presumiblemente, está evaluando las respuestas para resolver lo que mejor responde a su pregunta. – ChrisF
@Neil & @ChrisF - No estoy diciendo que haya ningún requisito. Tienes razón en esperar más de 1-2 horas. Saludos a Alice. – mloskot