#ifndef POINT
#define POINT
class Point
{
static int p;
public:
Point();
~Point();
private:
int num_point;
};
#endif
J'ai donc opté pour la création via un vecteur.
Cependant voici ce que j'obtiens avec la création de deux points :
Point number : 1 created
Point number : 1 destroyed
Point number : 2 created
Point number : 1 destroyed
Point number : 2 destroyed
>> Object found
Point number : 1 destroyed
>> Object found
Point number : 2 destroyed
Point number : 1 destroyed
Point number : 2 destroyed
Je ne comprends pas pourquoi j'ai plusieurs créations et destructions d'objets alors que je devrais n'en avoir que deux pour chaque.
De même faut il utiliser un tableau à la place d'un vecteur ?
Tu as bien créé 7 Points, les 7 destructions sont tracées mais des constructeurs de copies et de déplacement ont été appelés en plus du constructeur par défaut que tu as créé. Ligne 10, tu créés un Point (ctor par défaut que l'on voit dans la trace), mais le push_back doit créer un Point dans le vector (ctor par déplacement de ton Point). Ligne 11, il y a 3 créations de Points. Celui explicite, celui du push_back et comme le vector a du grandir un ctor de déplacement peut être nécessaire. Ligne 16, a chaque itération il faut obtenir un Point p qui doit être construit par le ctor de copie, d'où 2 de plus. Il y a bien 7 créations.
On peut écrire ce code de manière à ce que seuls les 2 Points nécessaires soient créés.
std::vector<Point> table;
table.reserve(2); // on prévoit 2 Points dans table
table.emplace_back(); // création directe dans table d'un Point
table.emplace_back();
for ( Point const& p : table ) { // on référence les Point dans table
std::cout << " >> Object found" << std::endl;
}
Développeur Web autodidacte HTML5/CSS3/JS + C# (ASP.NET Core) / Python (Django)
En recherche d'emploi.