Diskuze: Deštruktor
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 8 zpráv z 8.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Nastavenie hodnoty pointera na null / nullptr neuvoľňuje zabranú pamäť, na to slúži delete.
Ak zmažeš údaje v pamäti, na ktorú ukazuje pointer pomocou delete, stále nemáš veľmi ako skontrolovať z iných miest v programe, či pointer stále ukazuje na existujúce dáta alebo nie. Na to musíš práve pointer nastaviť na null a niekde inde v programe ho oproti tejto hodnote pred prístupom kontrolovať.
Takže ak trváš na používaní raw pointerov, správny postup by mal byť
v deštruktore použiť delete. Pokiaľ máš niekde inde v programe
pointer na túto inštanciu typu Trieda, mal by si po zmazaní cez
delete instanciaTriedy ešte nastaviť instanciaTriedy na
nullptr. Každopádne ti odporúčam pozrieť sa na tzv. smart pointery
Deštruktor mám cez delete a mám vytvorenú inštanciu Triedy v main, ale keď zavolám delete inštancia tak ma hodí do deštruktora a ukáže mi error: project.exe has triggered a breakpoint. Čím to môže byť?
Trieda* trieda = new Trieda(&meno,&typ);
delete trieda ;
trieda = nullptr;
Len tak zo zaujímavosti, ako prichádzaš k hodnote meno? Ako vytváraš tento string?
ukaž ještě hlavičku (alespoň pro mě).
Jinak, nevím, co používáš za IDE (tuhle chybu vidím po prvé...), ale
ověř, zda oba ukazatelé ukazují buď na NULL, nebo na blok paměti, kam
mohou zapisovat / číst.
Taky by mě zajímalo, zda máš prázdný konstruktor vytvořený (pak by to
mohlo způsobovat problémy výše).
delete sa používa na uvoľnenie pamäti v halde. delete
používaš len na pamäť, ktorú si alokoval s operátorom
new. Preto ten problém.
V tvojom prípade by si v deštruktore používal delete len v
prípade, keby si v konštruktore používal na alokovanie stringov
new. Preto tám žiadne delete nemá byť.
Vidím, že trocha nechápeš ako funguje new/delete, skús si
prečítať nejaký článok aby si si to ujasnil.
Zobrazeno 8 zpráv z 8.