Kezdőoldal » Számítástechnika » Programozás » C++-ban a destruktorban mit...

C++-ban a destruktorban mit kell felszabadítani és hogyan?

Figyelt kérdés

Tudom hogy mire való és a tanár ezzel el is intézte, jobban nem ment bele.


Ha pl adott egy osztály aminek van pl:

- 1 db int valtozoja

- 1 db string

- 1 db vector

- 1 db custom osztály.


Ilyenkor mit és hogyan kellene? Csak akkor kell valamit csinálni ha azokra pointerrel hivatkozok?


Köszönöm a válaszokat!


2018. jan. 15. 18:20
 1/3 anonim ***** válasza:
Pongyolán fogalmazva igen, csak azt kell manuálisan felszabadítani, amire pointeren keresztül hivatkozol. Az szabadul fel magától, ami közvetlenül az osztály eleme. Egy int, vagy vector adattag felszabadul magától, ahogy pl egy int* pointer is - a pointer által mutatott érték viszont már nem tartozik az osztályhoz, ezért az 'beragad' a memóriába.
2018. jan. 15. 18:29
Hasznos számodra ez a válasz?
 2/3 A kérdező kommentje:
Köszi. Esetleg tudsz küldeni valami forrást? Nem muszáj magyarnak lennie.
2018. jan. 15. 18:31
 3/3 sharkxxx ***** válasza:

Itt van egy példa.


class Object

{

private:

    int length;

    std::string name;

    std::vector<int> list;

    int arr[10];

    char * str;

    double * number;

    double * values;

    char * names[10];

public:

    Object() : length(0), name(), list() {

        // Azt a memoriat, amit te foglalsz le a new operatorral,

        // azt majd neked kell felszabaditani.

        int i;

        str = new char[260]; // majd fel kell szabaditani

        str[0] = '\0';

        number = new double; // majd fel kell szabaditani

        values = new double[10]; // majd fel kell szabaditani

        for (i = 0; i < 10; i++) {

            arr[i] = 0;

            values[i] = 0.0;

            names[i] = new char[100]; // majd fel kell szabaditani

            names[i][0] = '\0';

        }

    }

    ~Object() {

        int i;

        delete [] str; // fel kell felszabaditani

        delete number; // fel kell felszabaditani

        delete [] values; // fel kell felszabaditani

        for (i = 10; i >= 0; i--) {

            delete [] names[i]; // fel kell felszabaditani

        }

        // length - nem kell felszabaditani

        // name - nem kell felszabaditani

        // list - nem kell felszabaditani

        // arr - nem kell felszabaditani

    }

};

2018. jan. 15. 22:14
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!