Disons que j'ai une structure nommée sommet avec une méthode qui ajoute deux sommets:Quand est-il prudent d'ajouter des valeurs d'objet aux vecteurs sur le tas?
struct vertex {
float x, y, z;
// constructs the vertex with initial values
vertex(float ix, float iy, float iz);
// returns the value c = this + b
vertex operator+(vertex b);
};
vertex::vertex(float ix, float iy, float iz){
this->x = ix; this->y = iy; this->z = iz;
}
vertex vertex::operator+(vertex b){
vertex c;
c.x = this->x + b.x;
c.y = this->y + b.y;
c.z = this->z + b.z;
return c;
}
Dans une autre fonction d'appel que je veux ajouter deux sommets et ajouter le résultat à une vector<vertex*>
. Quand est-il prudent d'utiliser la valeur renvoyée pour ajouter au vecteur donné? Si jamais, comment pourrais-je l'implémenter?
Par exemple,
vector<vertex*> v;
vertex a(1, 2, 3);
vertex b(4, 5, 6);
v.push_back(&(a + b));
Cela clarifie un peu, mais étant donné que, quel est un moyen sûr de le faire sans renvoyer des pointeurs de la fonction opérateur? Je veux pouvoir chaîner différents opérateurs ensemble - c'est-à-dire a + b + c. – Asuah
Vous pouvez toujours le faire si vous utilisez une sémantique de valeur par passe et de retour par valeur. Ce sera en sécurité. Il suffit de faire un vecteur d'objets vertex plutôt qu'un vecteur de pointeurs vers des sommets. – Uri
Utiliser le pointeur intelligent est une autre option ici. –