Wpis z mikrobloga

Wiadomo, jak mam spac to przypomnial mi sie taki problem kolegi.

Klasa IAaa, interfejsu, wszystko w nagłówku, destruktor virtual IAaa = default.
W publicznych zmiennych m.in dwa unikalne wskaźniki aptr,bptr.

Klasa B : public Iaaa, w konstruktorze mial aptr=nullptr.

W nagłówku mial destruktor virtual B = default

W funkcji B::create (czemu nie w konstruktorze nie wiem) mial aptr.create ( funkcja xyz () // innej zew klasy ktora zwraca pointer do TYPp );

Wreszcie w main () bylo
B* ppp = new B ();
...
Delete ppp;

ogolnie #!$%@? od kiepskiej architektury i zawilosci, wielu bledow ktore byly, a niektore nawet wylapalem, to zastanawiam sie naf kilkoma rzeczami.

Czy uniq ptr = nullptr, a pozniej aptr.create () bedzie dzialac?
Czemu nie aptr = make_uniq(funkcja xyz ()); nie działa, undefined operator = (myslalem ze kopiowanie to w stdlibie jest zawsze. )
Coz moze byc za blad jesli wysypywalo mu sie na delete w mainie, double free. Troche za bardzo zawile jest dla mnie sledzenie wirtualnych destruktorow, dawno sie w to nie bawilem.

Aa jeszcze jedno w B::create zamiast aptr.create (funkcja xyz) zadzialalo kopiowanie aptr = uniqueptr (funkcja xyz ()) ale wydaje sie to dosc brzydkir

#programowanie #cpp
  • 2