Skocz do zawartości

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


Recommended Posts

Napisano

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.

Napisano

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);

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...