non voglio scrivere in ogni classe che uso shared_ptr o unique_ptr questo:E 'ok per ereditare da una su modelli tipi puntatori intelligenti unica classe
std::shared_ptr<Foo> p = CreateFoo();
sto usando questo:
template <typename T>
struct ptr_types
{
typedef std::shared_ptr<T> sptr;
typedef std::unique_ptr<T> uptr;
};
class A: public ptr_types<A>
{
public:
A(){}
int m;
};
Poi, posso fare questo:
A::sptr p(new A);
è un problema da un punto di vista del design ereditare mie classi che utilizzano puntatore intelligente S? C'è una soluzione più elegante?
EDIT:
sì posso usare:
auto p = std::make_shared<A>();
ma che dire se ho questo:
std::shared_ptr<A> A::CreateA()
{
....
}
void A::Sink(std::unique_ptr<A> p)
{
...
}
meglio avere qualcosa di simile?
A::sptr A::CreateA()
{
...
}
void A::Sink(A::uptr p)
{
...
}
Forse la domanda non ha senso .. e sono io essere pigro a scrivere la std :: blabla per tutto il tempo in funzione del tipo ritorni o parametri.
cosa succede se 'A' eredita da un'altra classe derivata da' ptr_types'? –
Questo è intelligente IMHO. – didierc
Mmm questo sarà un problema, ci sarà una collisione di nomi, non è vero? – FrameBuffer