Bonjour,

voilà je m'entraine à faire des allocations dynamiques de tableaux, mais j'ai un doute quant à la qualité de mes désallocations, est-ce que quelqu'un pourrait me dire si les désallocations de mémoire dans le code ci-dessous sont correctes (je me pose la question, car quand j'appelle delete [] tab2, il appelle le destructeur de l'objet, et j'ai dont l'impression qui détruire une adresse déjà détruite et je n'arrive pas à comprendre pourquoi) :

Hello.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "Hello.hpp"
#include <iostream>
using namespace std;
Hello::Hello(char name[])
{
     cout<<"Construction d'un objet name a l'adresse : "<<this<<endl;
     this->name = new char;
     strcpy(this->name,name);
}
Hello::~Hello()
{
     cout<<"Destruction d'un objet name a l'adresse : "<<this<<endl;
     delete name;
}
void Hello::affiche()
{
     cout<<"Hello "<<name<<endl;
}

Hello.hpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
#ifndef Hello_HPP
#define Hello_HPP
class Hello{
      public:
             Hello(char[] = "Defaut");
             ~Hello();
             void affiche();
      private:
              char *name;
};
#endif
testhello.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include "Hello.hpp"
#include <conio.h>
Hello *testTab(int nbObjets)
    {
         Hello *tab = new Hello[nbObjets];
         return tab;
    }
int main()
{
    int nbObjets = 3;
    Hello *tab2 = testTab(nbObjets);
    for(int i=0;i<nbObjets;i++)
    {
    tab2[i].affiche();
    }
    Hello hello("Toto");
    hello.affiche();
    hello.new_name("Titi");
    hello.affiche();
    hello.~Hello();
    for(int j=0;j<nbObjets;j++)
    {
             tab2[j].~Hello();
    }
    delete [] tab2;
    getch();
}
Merci.