maniek910 Napisano Styczeń 17, 2015 Zgłoś Udostępnij Napisano Styczeń 17, 2015 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. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Bartosz Wójcik Napisano Styczeń 20, 2015 Zgłoś Udostępnij Napisano Styczeń 20, 2015 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); Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.