Skocz do zawartości

Zniszczenie obiektu wskazywanego przez wskaźnik a destruktor c++


maniek910

Recommended Posts

Witam !

Mam pytanie chodzi mi mianowicie o niszczenie obiektu na który wskazuje wskaźnik, ale nie chodzi mi tutaj o coś w stylu :

nazwa_klasy *nowy = new nazwa_klasy();
delete nowy;

Zależy mi, aby to wszystko działo się w destruktorze mianowicie coś takiego:

 
#include <iostream>
#include<cstdlib>
 
using namespace std;
 
class pp
{
private :
    int wartosc;
public:
    pp():wartosc(rand()%100){}
    ~pp();
    void show();
};
 
pp::~pp()
{
    // usuniecie obiektu wskazywanego
}
 
void pp::show()
{
    cout << wartosc << endl;
}
 
int main()
{
    pp *nowy = new pp();
    nowy->show();
 
    nowy->~pp();
 
    return 0;
}

Próbowałem coś w stylu:

pp::~pp()
{
   delete this;
}

 

Ale nic z tego, z góry dzięki za pomoc.

Pozdrawiam.

Link do komentarza
Udostępnij na innych stronach

To bezcelowe co robisz, bo z wnętrza klasy chcesz ją skasować, to tak jakbyś był na łodzi podwodnej i chciał ją zdetonować zanim z niej wysiądziesz :), desktruktor klasy służy do zwalniania zasobów zaalokowanych przez metody klasy.

Ty odpowiadasz za zwolnienie instancji klasy, jeśli alokowałeś ją dynamicznie. Możesz jednak zadeklarować ją statycznie czyli pp nowy; i klasa zostanie automatycznie zwolniona po wyjściu z bieżącego scope.

Możesz też skorzystać ze smart pointerów w C++, które spowodują, że nawet jeśli klasa została utworzona przez operator new to po wyjściu z bieżącego scope zostanie zwolniona

std::auto_ptr<pp> klasaPP(new pp);
Link do komentarza
Udostępnij na innych stronach

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...