delete czy delete[] dla <typ złożony> *zmienna

0

Witam, "proste" pytanie.
Mam klasy, powiedzmy:

class C1 {
private:
   int _x;
   string _str;
public:
   C1(int x, string str);
};

class C2 {
private:
   C1 *_Array;
   int _x;
public:
   C2(int x, C1 *Array);
   ~C2();
};

C2::C2(int x, C1 *Array) : _x(x), _Array(Array)
{}
C2::~C2(){
    //delete czy delete[] _Array;
}
 

_Array jest tworzona tak jak w napisanym konstruktorze, jest to zawsze tablica zawierająca przynajmniej 3 elementy (nigdy mniej). Jakiego operatora użyć w dekonstruktorze? delete Array; czy delete[] Array; .

Pozdrawiam.

1
delete - dla new
delete[] - dla new[]
0

Ja w tym przykładzie w ogóle nie widzę delete, bo nie widzę żebyś w konstruktorze przydzielał dynamicznie jakąkolwiek pamięć.

0

W tym przypadku aż prosi się o zastosowanie inteligentnego wskaźnika. W tej chwili nie wiadomo za bardzo kto ma odpowiadać za zwolnienie przekazywanej pamięci. Użyj std::unique_ptr, jeżeli twój obiekt ma przejąć całkowitą kontrolę nad pamięcią - zostanie ona zwolniona, gdy twój obiekt przestanie istnieć, std::shared_ptr, gdy chcesz, by pamięć była dostępna przez całe życie twojego obiektu, ale nie masz nic przeciwko, żeby była zwolniona jeszcze później. Masz jeszcze std::weak_ptr, ale w tym konkretnym przypadku raczej się nie sprawdzi.

0

@_13th_Dragon
Tyle to wiem, jednak w tym przypadku taka odpowiedź raczej nie wystarczy, prawda? Chodź, pewnie ja zadałem źle pytanie, które raczej powinno brzmieć, "Jak poprawnie zwolnić pamięć tej tablicy w tym wypadku?"
@Rev
Dzięki za zrozumienie mojego niedopowiedzenia :D, przyjrzę się bliżej temu i prawdopodobnie zastosuje std::unique_ptr

1 użytkowników online, w tym zalogowanych: 0, gości: 1