Data la situazione comune in cui la durata di vita di un oggetto di proprietà è collegata al suo proprietario, posso utilizzare un puntatore univoco in 2 modi. .Devo assegnare o resettare un unique_ptr?
può essere assegnato:
class owner
{
std::unique_ptr<someObject> owned;
public:
owner()
{
owned=std::unique_ptr<someObject>(new someObject());
}
};
Il metodo di ripristino può essere utilizzato:
class owner
{
std::unique_ptr<someObject> owned;
public:
owner()
{
owned.reset(new someObject());
}
};
Nell'interesse di best practice, dovrei preferire una forma sopra l'altro?
MODIFICA: Scusate gente. Ho semplificato questo. L'allocazione dell'heap avviene in un metodo di inizializzazione e non nel ctor. Pertanto, non posso utilizzare gli elenchi di inizializzatori.
So che è tardi, ma solo per i futuri lettori. Secondo Scott Meyers nel suo libro Effective Modern C++, è preferibile std :: make_unique, perché offre un'eccezione di sicurezza: owner = std :: make_unique (). Il problema è che std :: make_unique fa parte di C++ 14 (non C++ 11), ma qui puoi trovare [qui] (https://isocpp.org/files/papers/N3656.txt) a buona implementazione che puoi copiare e incollare. –