Chapitre 13 : new, delete, nullptr

nullptr

En C++ pour représenter une adresse nulle on peut utiliser nullptr (au lieu de NULL).


new et delete

Pour allouer et construire un objet manuellement (sur le tas) on peut utiliser new qui appelle implicitement un constructeur de l'objet? Pour libérer un objet construit avec new il faut appeler delete.

EXEMPLE
class A{
  int* tab = nullptr;
  int s = 0;

  public:
    A(int n): tab{malloc(sizeof(int) * n)}, s{n}}
    A(const A& orig): tab{malloc(sizeof(int) * orig.s)}, s{orig.s}} //constr de copie
    const A& operator = (...){...}
    ~A(){free(this->tab);}
}

int main(void){
  A tab1{10};
  A* ptab2 = malloc(sizeof(A)); //pas d'appel au constructeur de la classe A
  A* ptab3 = new A{10}; //reservation sur le tas ET appel au constructeur A(int)

  free(ptab2) //libération seule
  delete ptab3; //appel au destruceur sur *ptab ET libération de la mémoire
}