[C++] - Segmentation fault

C, C++, Java, PHP, Ruby...

Moderator/ica: Moderatori/ce

Pravila foruma
U naslovu teme unutar uglatih zagrada navesti o kojem jeziku je riječ. Primjer: [Java]
Avatar
jjj
Postovi: 1451
Pridružen/a: 04 lip 2009, 00:46
OS: Nepu Yvahk
Lokacija: Classyfied

Re: [C++] - Segmentation fault

Post 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++.
Avatar
Grof
Site Admin
Postovi: 9954
Pridružen/a: 04 pro 2007, 08:00
Lokacija: Zagreb

Re: [C++] - Segmentation fault

Post 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 :)
Avatar
DoDo
Postovi: 1559
Pridružen/a: 23 sij 2008, 11:51
Spol: M
OS: GNOME 3
Lokacija: ~/Croatia/Zagorje/Radoboj

Re: [C++] - Segmentation fault

Post 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.
:mrgreen: Smile! It makes people wonder what you're thinking about... :mrgreen:
I am NaN, I am a free man!
Započnite svoje Linux iskustvo na http://wiki.open.hr
Odgovori