Ho alcune domande sulle migliori pratiche di utilizzo di shared_ptr
.Domande sugli usi di shared_ptr - C++
Domanda 1
sta copiando shared_ptr
a buon mercato? O devo passare come riferimento alle mie proprie funzioni di supporto e restituire come valore? Qualcosa di simile,
void init_fields(boost::shared_ptr<foo>& /*p_foo*/);
void init_other_fields(boost::shared_ptr<foo>& /*p_foo*/);
boost::shared_ptr<foo> create_foo()
{
boost::shared_ptr<foo> p_foo(new foo);
init_fields(p_foo);
init_other_fields(p_foo);
}
Domanda 2
Devo usare boost::make_shared
per costruire un shared_ptr
? Se sì, quali vantaggi offre? E come possiamo usare make_shared
quando T
non ha un costruttore parametrico?
Domanda 3
Come usare const foo*
? Ho trovato due approcci per farlo.
void take_const_foo(const foo* pfoo)
{
}
int main()
{
boost::shared_ptr<foo> pfoo(new foo);
take_const_foo(pfoo.get());
return 0;
}
O
typedef boost::shared_ptr<foo> p_foo;
typedef const boost::shared_ptr<const foo> const_p_foo;
void take_const_foo(const_p_foo pfoo)
{
}
int main()
{
boost::shared_ptr<foo> pfoo(new foo);
take_const_foo(pfoo);
return 0;
}
Domanda 4
Come posso tornare e verificare la presenza di NULL
su un oggetto shared_ptr
? È qualcosa di simile,
boost::shared_ptr<foo> get_foo()
{
boost::shared_ptr<foo> null_foo;
return null_foo;
}
int main()
{
boost::shared_ptr<foo> f = get_foo();
if(f == NULL)
{
/* .. */
}
return 0;
}
Qualsiasi aiuto sarebbe grande.
La documentazione hanno una pagina di temporizzazione: http://www.boost.org/doc/libs/1_41_0/libs/smart_ptr/smarttests.htm –