Prova n° 2
E così vedo che ad ogni fuori scope viene richiamato il distruttore corretto.codice:#include <iostream> #include <stdlib.h> #include <memory> using namespace std; class Prova { public: Prova(){cout<<"\nCreato l'oggetto Prova!";}; ~Prova(){cout<<"\nDistrutto l'oggetto Prova!";}; void run(){cout<<"\nProva is running!";}; void pause(){cout<<"\nProva is paused!";}; void termin(){cout<<"\nProva is terminated!";}; }; class Oggetto { public: Oggetto(){cout<<"\nCreato l'oggetto Oggetto!";}; Oggetto(shared_ptr<Prova> puntatore):mProva(puntatore){cout<<"\nCreato l'oggetto Oggetto!";}; ~Oggetto(){cout<<"\nDistrutto l'oggetto Oggetto!";}; void run(){cout<<"\nOggetto is running!";mProva->run();}; void pause(){cout<<"\nOggetto is paused!";mProva->pause();}; void termin(){cout<<"\nOggetto is terminated!";mProva->termin();}; private: shared_ptr<Prova> mProva; }; int main() { { shared_ptr<Prova> prova(new Prova); prova->run(); prova->pause(); prova->run(); prova->termin(); system("pause"); { unique_ptr<Oggetto> oggetto(new Oggetto(prova)); oggetto->run(); oggetto->pause(); oggetto->run(); oggetto->termin(); } system("pause"); } system("pause"); return 0; }