#include class Pouet { public: Pouet(int* i) : _i (i) { std::cout << "kikoo" << std::endl; } ~Pouet() { std::cout << "destroy" << std::endl; delete _i; } int* _i; }; void testBug(Pouet p) { std::cout << *p._i << std::endl; // Ok la 1ere fois // bug, car copie, donc p, et donc i, va se faire detuire ici // appel du destructeur, car p est une variable local temporaire } void test(const Pouet& p) { std::cout << *p._i << std::endl; // ok, car pas de copie ! } int main() { int* i = new int[1]; *i = 5; Pouet pouet(i); test(pouet); test(pouet); test(pouet); testBug(pouet); testBug(pouet); testBug(pouet); return 0; }
Pouet(const Pouet& p) { // On copie pour de vrai, on ne fais pas seulement "pointer le pointeur". _i = new int[1]; *_i = *p._i; }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionExpoEmetteur expo = ExpoEmetteur(emetteur, autres arguments...);
ExpoEmetteur expo(emetteur, autres arguments...);
ExpoEmetteur* expo = new ExpoEmetteur(emetteur, autres arguments...); std::vector<ExpoEmetteur*> listExpo; listExpo.push_back(expo); // Ne pas oublier de détruire tous ce qui est dans le vecteur, une fois que l'on a fini de travailler avec.
Ca ne marche plus, il repasse par le destructeur... et fait donc un delete de _emetteur...