Stranica: 4/4.

Re: [C++] - Segmentation fault

Postano: 06 pro 2009, 00:51
Postao/la jjj
Grof je napisao/la:
jjj je napisao/la: Ne razumijem; kakvi destructori u high lvl jezicima s garbage collectorom?
Fućkam ja na razmažene programere koji oslobađanje objekata prepuštaju kompajlerovom sakupljaću smeća.
Mislim da se nismo razumjeli, hm. Ja sam imao na umu interpretirane, dinamične, (very) high lvl jezike.
No, kad već razgovaramo, ja se trenutno ne mogu sjetiti nijednog programskog jezika koji se još uvijek koristi a da zahtijeva ručno i eksplicitno bavljenje memorijom, sem C/C++.

Re: [C++] - Segmentation fault

Postano: 06 pro 2009, 10:37
Postao/la Grof
jjj je napisao/la: ja se trenutno ne mogu sjetiti nijednog programskog jezika koji se još uvijek koristi a da zahtijeva ručno i eksplicitno bavljenje memorijom, sem C/C++.
Pa zar to nije dovoljno :)

Re: [C++] - Segmentation fault

Postano: 06 pro 2009, 11:33
Postao/la DoDo
Grof je napisao/la:
DoDo je napisao/la: Pa bolje i to nego da 3 dana trazis memory leakove. A najgori su oni koji su u samom libraryju pa ih ni ne mozes rijesiti.
Da, ali kada programer stvara vlastite objekte i rezervira memoriju sa constructorom, u redu je i uredno da isti uništi sa destructorom, a ne da to prepušta garbage collectoru!

Ako analizirate biblioteke, uočiti će te da su destructori uredno upotrebljavani! To je jednostavno dobra programerska praksa!
Slazem se, ali nekad ti to stvara dodatni overhead.

Razmotri ovo:

Kod: Označi sve

objA.doSomething(new ObjectB((new ObjectC())->getSomething()))
ili ista stvar bez memory leaka:

Kod: Označi sve

ObjectC *objC=new ObjectC();
ObjectB *objB=new ObjectB(objC->getSomething());
delete objC;
objA.doSomething(objB);
delete objB;
U jeziku s garbage collectorom su oba napisana isjecka medjusobno ekvivalentna (cak se prvi preporuca i cesto koristi u C#-u i Javi), dok u C++-u prvi stvara memory leak, a drugi ne.