• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C++ Qt funkcja delete w dekonstruktorze klasy

Object Storage Arubacloud
0 głosów
460 wizyt
pytanie zadane 5 października 2017 w C i C++ przez hitem Początkujący (300 p.)
Piszę program wykorzystujący bibliotekę qt w Qt Creatorze.

W kilku klasach dynamicznie alokuję pamięć pod tabele obiektów. Zwalniam pamięć w de-konstruktorze za pomocą operatora delete bądź delete[].

Mimo, że kompilator nie zgłasza żadnych błędów to po uruchomieniu programu pokazuję się komunikat "program nieoczekiwanie przerwał prace" w momencie gdy przychodzi mu zwalniać pamięć.

Sprawdziłem, że jeśli nie użyje operatora delete to program działa, choć przy każdej operacji zajmuję więcej pamięci.

W internecie znalazłem coś co internauci nazwali "the role of three". Mówiące, że jeśli używam destruktora w mojej klasie to powinienem jeszcze zdefiniować konstruktor kopiujący oraz kopiujące operatory przypisania.

Czy to może rozwiązać mój problem?

I czy są jakieś inne reguły programowania w C++, które powinienem zgłębić? Czy znacie jakieś źródło wiedzy o rzeczach pomijanych w podręcznikach i kursach do nauki C++, a są niezbędne do pisania dobrych aplikacji?
komentarz 5 października 2017 przez mokrowski Mędrzec (155,460 p.)
A jakie masz powody które skłaniają Cię do używania surowych tablic zamiast np QVector czy QList?

Zgadzam się z @Criss'em... Pokaż kod bo opisy "słowno muzyczne" nic nie dadzą.

3 odpowiedzi

0 głosów
odpowiedź 5 października 2017 przez criss Mędrzec (172,590 p.)
wybrane 7 października 2017 przez hitem
 
Najlepsza

Pokaż kod. Bez kodu twój opis jest zdecydowanie zbyt ogólny. Ale odpowiadając na szybko: tak, to może być rozwiązanie. Cokolwiek by to nie było i tak powinieneś dopisać właściwe konstruktory/operatory. Jeśli twoje obiekty są gdzieś w kodzie kopiowane, to możesz być pewien, że z tego wynikają problemy.

W internecie znalazłem coś co internauci nazwali "the role of three". (...) I czy są jakieś inne reguły programowania w C++, które powinienem zgłębić? 

Rule* of three. Od c++11 "rule of three" jest rozszerzona do "rule of five" - dochodzi przenoszący konstruktor i przenoszący operator przypisania.

PS: destruktor, nie de-konstruktor :)

0 głosów
odpowiedź 5 października 2017 przez hitem Początkujący (300 p.)
To dam link do githuba:

https://github.com/hitem12/family_tree

 

Głównie sprawia mi problem klasa SimpleTree, jak i również klasa Person.
0 głosów
odpowiedź 7 października 2017 przez hitem Początkujący (300 p.)
Dziękuje ślicznie za odpowiedzi. Wziąłem się za próbę lepszego opisania mojego problemu i okazało się, że użyłem delete zamiast delete[].

Podobne pytania

0 głosów
1 odpowiedź 136 wizyt
0 głosów
1 odpowiedź 257 wizyt
0 głosów
1 odpowiedź 146 wizyt
pytanie zadane 1 kwietnia 2020 w PHP przez marcolo Obywatel (1,530 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...