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

boost::enable_shared_from_this problem sa nasledjenim klasama

[es] :: C/C++ programiranje :: boost::enable_shared_from_this problem sa nasledjenim klasama

[ Pregleda: 2202 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
*.dynamic.isp.telekom.rs.

ICQ: 208550327


+14 Profil

icon boost::enable_shared_from_this problem sa nasledjenim klasama02.01.2012. u 14:31 - pre 149 meseci
Koristim boost::shared_ptr za memory management klasa u aplikaciji. Imam klasu Object koja je bazna klasa i koja je nasledjena is boost::enable_shared_from_this da bih mogao da koristim shared_from_this() feature.

Code:


class Object : public boost::enable_shared_from_this<Object>
{
      .....
}

class Application : public Object
{
    .....
}

class GraphicsApplication : public Application
{
    .....
}



Problem nastaje kada iz izvedene klase GraphicsApplication pokusam da pozovem shared_from_this() ( verovatno je isti problem i sa Application klasom ali nisam probao ).
Pokusao sam na razne nacine da castujem shared_from_this() poziv u GraphicsApplication klasi, isprobao nekoliko saveta koje sam nasao na netu ali nista od toga ne radi.

Tako da je pitanje, kako pravilno dizajnirati ovaj kod da shared_from_this() radi u izvedenim klasama?
EOF
 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.3gnet.mts.telekom.rs.



+2789 Profil

icon Re: boost::enable_shared_from_this problem sa nasledjenim klasama03.01.2012. u 11:25 - pre 149 meseci
Ako je klasa Derived izvedena iz Base, to ne povlači nasleđivanje između klasa boost::shared_ptr<Base> i boost::shared_ptr<Derived>. Klasa Base ako je izvedena iz klase boost::enable_from_this ima metodu shared_from_this() koja vraća boost::shared_ptr<Base> i klasa Derived nasleđuje tu metodu sa istim potpisom. Ako klasu Derived izvedeš iz klasa Base i boost::enable_from_this<Derived>, ona će imati metodu shared_from_this, koja vraća boost::shared_ptr<Derived>. Međutim, pitanje je da li je to potrebno, jer sirovi pokazivač iz boost::shared_ptr<Base> možeš da pretvoriš u sirovi pokazivač na Derived, kao i upućivanje (reference) na pokazivani objekat u upućivanje na Derived.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
*.dynamic.isp.telekom.rs.

ICQ: 208550327


+14 Profil

icon Re: boost::enable_shared_from_this problem sa nasledjenim klasama03.01.2012. u 15:11 - pre 149 meseci
Hvala na odgovoru. Nasao sam gde je greska.

Ja sam GraphicsApplication inicijalizovao kao raw pointer i mislim da zato mehanizam za shared_from_this() nije radio i kada sam promenio da se GraphicsApplication inicijalizuje kao shared_ptr program je proradio.

Code:


boost::shared_ptr<Application> app(new GraphicsApplication);

if(app->initInstance())
{
    app->run();
}



shared_from_this() za klasu GraphicsApplication dobijam sada na sledeci nacin ( npr, u metodi initInstance() ):

Code:


bool GraphicsApplication::initInstance()
{
      boost::shared_ptr<Object> obj = shared_from_this();
      boost::shared_ptr<GraphicsApplication> me = boost::static_pointer_cast<GraphicsApplication>(obj);
}


EOF
 
Odgovor na temu

[es] :: C/C++ programiranje :: boost::enable_shared_from_this problem sa nasledjenim klasama

[ Pregleda: 2202 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

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