Post Reply 
 
Thread Rating:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Dinamički alociran objekt unutar funkcije
Author Message
danielvast Offline
Forumaš
***

Posts: 432
Joined: Dec 2009
Reputation: 22
Post: #1
Dinamički alociran objekt unutar funkcije
Ok, evo mene opet sa pitanjima lol, dakle imam problem napravio sam klasu matrica koja dinamicki alocira svoje elemente na heap-u, te napravio overload funkcije mnozenja dakle funkcija je tipa matrix i vraća objekt problem sa ovime je što vraćam referencu na objekt koji je alociran u funkciji pa se brise kada nestane funkcija ovo sam rijesio tako sto sam objekt alocirao na heap-u, moje je pitanje kako pobrisati taj objekt i dali ga uopce treba brisati sta se desava sa time objektom
Code:
.
.
matrix& operator* (matrix& m1)
{
   matrix *m2 = new matrix (m1.rows, cols);
   .
   .
   return *m2;
}

Znam da se za to u novije vrijeme brine garbage collector i da to on brise, ali htio ih da znak kako pobrisati ovako alociran objekt.

"When all else fails, read the manual."
07-02-2011 11:11 PM
Find all posts by this user Quote this message in a reply
schmrz Offline
____
*

Posts: 567
Joined: Feb 2007
Post: #2
RE: Dinamički alociran objekt unutar funkcije
Ako si nešto dinamički alocirao onda je na tebi da se pobrineš da to i obrišeš. Naravno, možeš recimo koristiti i Boostove "Smart Pointer"-e. C++ nema garbage collectora pa čak ni novi C++0x ga neće imati (ali će biti detaljno objašnjeno i podržano implementiranje garbage collectora). A što se tiče brisanja, koristi `delete` ili `free()`, zavisno od toga šta ti treba. `delete` će pozvati destruktor objekta pa onda osloboditi memoriju, a `free()` će samo osloboditi memoriju. I preporučuje se da nakon oslobađanja pointer postaviš na `NULL`, da slučajno negdje u kodu ne bi opet pozvao free/delete na taj pointer (što bi rezultiralo greškom).

I have no drinking problems. I drink. Get drunk. Fall down. NO PROBLEM
Registered As Linux User #484215
Moj skromni blog
Savjet za buduće programere: ovdje
08-02-2011 07:20 PM
Find all posts by this user Quote this message in a reply
danielvast Offline
Forumaš
***

Posts: 432
Joined: Dec 2009
Reputation: 22
Post: #3
RE: Dinamički alociran objekt unutar funkcije
OK hvala Schmrz, problem koji ja imam je da desktruktor brise dinamički alociranje elemente na heap-u kada vratim lokalni objekt (objekt stvoren u funkciji) automatski mi se poziva deskruktor koji pobriše sve sto je na tome objektu napravljeno jedini nacin da ne pozovem destruktor je da unutar funkcije dinamički alociram objekt, znači ako naprimjer napravim ovo:

Code:
matrix *m, *m1, *m2;
   m = new matrix();
   m1 = new matrix();
   m2 = new matrix();
   .
   .
   *m = *m * *m1;
   delete m;
   delete m1;
   delete m2;

Hoce li se pobrisati objekt koji sam alocirao unutar operatora koji sam opteretio ?

"When all else fails, read the manual."
(This post was last modified: 08-02-2011 09:41 PM by danielvast.)
08-02-2011 09:17 PM
Find all posts by this user Quote this message in a reply
schmrz Offline
____
*

Posts: 567
Joined: Feb 2007
Post: #4
RE: Dinamički alociran objekt unutar funkcije
Bez obzira gdje da pozoveš delete, obrisati će se.

I have no drinking problems. I drink. Get drunk. Fall down. NO PROBLEM
Registered As Linux User #484215
Moj skromni blog
Savjet za buduće programere: ovdje
09-02-2011 04:00 PM
Find all posts by this user Quote this message in a reply
danielvast Offline
Forumaš
***

Posts: 432
Joined: Dec 2009
Reputation: 22
Post: #5
RE: Dinamički alociran objekt unutar funkcije
OK super hvala VELIKA! He he

"When all else fails, read the manual."
09-02-2011 04:08 PM
Find all posts by this user Quote this message in a reply
kecko Offline
Forumaš
***

Posts: 645
Joined: Nov 2009
Reputation: 20
Post: #6
RE: Dinamički alociran objekt unutar funkcije
To si mogao logikom zaključiti, sve su to pointeri, znači adrese memorije, obrišeš u memoriji vrijednost na adresi odkud god to je ta vrijednost došla (variable scope). Mislim da ćeš ovako bolje znati za ubuduće sve. Bez obzira od kud ti zvao tu adresu, ona je samo jedna. Debugiranje isto bi ti vjerojatno puno pomoglo, pa da sam vidiš koja varijabla kada ima koju, kad joj se mjenja etc. Zato preporučam Visual studio :))
(This post was last modified: 11-02-2011 07:01 AM by kecko.)
11-02-2011 07:00 AM
Find all posts by this user Quote this message in a reply
danielvast Offline
Forumaš
***

Posts: 432
Joined: Dec 2009
Reputation: 22
Post: #7
RE: Dinamički alociran objekt unutar funkcije
Imam visual studio ali ga ne koristim razlog tome je sto za ove potrebe (fax) mi nije bas najbolji jer za svaki program zahtjeva stvaranje projekta tu mi se stvara problem kod organizacije i slanja programa kolegama, pa mije ovako lakse mislim ne pravim ja tu neke aplikacije to su samo aplikacije za dokazivanje koncepta u konzoli kada se budem ozbiljnije bavio stvaranjem aplikacija tada treba ozbiljno razmatrati visual studio.

Sto se tice samog zadatka da ovako mi se vec cini i logicno jer vraćam referencu, a delete oslobađa prostor pokazivača, mislim da bi porblem bio kada bi alocirao objekt na stack-u i koristio copy konstruktor tada bi ostao prostor u memoriji koji se nemoze osloboditi što bi rezultirao memory leakom, sto se tice samog debugger-a, da neznam zasto mi nije palo napamet ne koristim ga precesto mislim da bi trebao poceti ako se ozbiljno mislim baviti programiranjem, medutim ovako dobivam i objašnjenje zasto je to tako da budući da sam relativno nov u programiranju to mi je prijeko potrebno, inace hvala vam na objašnjenju He he

"When all else fails, read the manual."
11-02-2011 01:44 PM
Find all posts by this user Quote this message in a reply
Post Reply 


Forum Jump:


User(s) browsing this thread: 1 Guest(s)