Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Vracanje boost::shared_ptr iz funkcije

[es] :: C/C++ programiranje :: C/C++ za početnike :: Vracanje boost::shared_ptr iz funkcije

[ Pregleda: 1796 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Dovla84
Vladimir

Član broj: 138295
Poruke: 43
*.dynamic.sbb.rs.



+1 Profil

icon Vracanje boost::shared_ptr iz funkcije25.10.2011. u 01:47 - pre 151 meseci
Imam metodu klase koja treba da vrati objekat po referenci i izgleda od prilike ovako:

Code:
Configuration& ConfigurationManager (vector<string>&v)
{
    boost::shared_ptr<Configuration> config (new Configuration());
    ......              //ovaj deo nije bitan jer se vrse neke bazicne operacije
    return *config;
}



Zanima me da li je return *config; validno napisati i sta ce vratiti sobzirom da se radi o shared_ptr pointeru (tek ucim kako funkcionisu smart pointeri)? Ako nije u redu, kako da vratim Configuration& ?
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
*.bstnma.east.verizon.net.



+6 Profil

icon Re: Vracanje boost::shared_ptr iz funkcije26.10.2011. u 03:47 - pre 151 meseci
Ne možeš da vratiš Configuration& jer će to biti referenca na lokalni objekat koji je uništen na kraju funkcije. Ako hoćeš da koristiš shared_ptr (koji je sad i deo standarda, pa ne moraš više da uključuješ Boost) onda napišeš nešto ovako:

Code:

shared_ptr<Configuration> ConfigurationManager (vector<string>&v)
{
    shared_ptr<Configuration> config (new Configuration());
    ......              //ovaj deo nije bitan jer se vrse neke bazicne operacije
    return config;
}


a ja najviše volim ovako:

Code:

Configuration ConfigurationManager (vector<string>&v)
{
    Configuration config;
    ......              //ovaj deo nije bitan jer se vrse neke bazicne operacije
    return config;
}

 
Odgovor na temu

Goran Arandjelovic
Beograd

Član broj: 29116
Poruke: 387
*.matf.bg.ac.rs.



+9 Profil

icon Re: Vracanje boost::shared_ptr iz funkcije27.10.2011. u 13:16 - pre 151 meseci
Ja bih samo malo da pojasnim šta je Dragi Tata hteo da kaže ovim drugim primerom, da ne dođe do zabune. :)
Naime, u drugom primeru (doduše, u zavisnosti od kompajlera i uključenih optimizacija) će se desiti copy ellision i pozivanje move konstruktora nakon dodele takve povratne vrednosti nekom novom objektu (naravno, samo u slučaju ako je move konstruktor definisan unutar klase Configuration, u ovom primeru)
 
Odgovor na temu

Dovla84
Vladimir

Član broj: 138295
Poruke: 43
*.hsl.eu.



+1 Profil

icon Re: Vracanje boost::shared_ptr iz funkcije27.10.2011. u 15:39 - pre 151 meseci
Ok. Kapiram. Moram da pazim na scope. Hvala.
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: Vracanje boost::shared_ptr iz funkcije

[ Pregleda: 1796 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.