#include <iostream>

using namespace std;

extern int main_exos_11(void);

class D
{
private :
    int * x;
public :
    D();
    D(const D & other);
    ~D();
};

D::D()
{
    cout << "Constructeur par défaut" << endl;
    /** A ACTIVER POUR VOIR LE BUG
      * on demande à détruire une zone déjà détruite
      */
    // x = new int [4];
}

D::D(const D & other)
{
    cout << "Constructeur de copie" << endl;
      x = new int [4];
      for (int i = 0; i < 4; i++)
        x[i] = other.x[i];
}

D::~D()
{
    cout << "Destructeur : " << this << endl;
    delete [] x;
}

int main_exos_11(void)
{
    D a;
    D b(a);
    D * pa = 0; // pointeur nul
    // 4 adresses aléatoires
    D * pb;
    D * pc;
    D * pd;
    D * pe;

    pc = &a;
    pd = pc;
    pe = &b;

    cout << "ADRESSES DES 7 VARIABLES " << endl;
    cout << &a << endl;
    cout << &b << endl;
    cout << pa << endl;
    cout << pb << endl;
    cout << pc << endl;
    cout << pd << endl;
    cout << pe << endl;

    cout << endl << "DESTRUCTIONS " << endl;
    delete pa; // pas d'appel car pointeur nul
    delete pb;
    delete pc;
    delete pd;
    delete pe;

    return 0;
}

