Sahip olunan bir nesnenin ömrünün sahibine bağlı olduğu ortak durum göz önünde bulundurulduğunda, benzersiz bir işaretçiyi 2 yoldan birini kullanabilirim. .Bir unique_ptr atamalı mıyım yoksa sıfırlamalı mıyım?
Bu atanabilir :
class owner
{
std::unique_ptr<someObject> owned;
public:
owner()
{
owned=std::unique_ptr<someObject>(new someObject());
}
};
sıfırlama yöntemi kullanılabilir: En iyi uygulama çıkarları
class owner
{
std::unique_ptr<someObject> owned;
public:
owner()
{
owned.reset(new someObject());
}
};
, başka üzerinden bir formu tercih etmeliyiz?
EDIT: Üzgünüm millet. Bunu basitleştirdim. Yığın tahsisi, bir başlangıç yönteminde ve ctorda değil. Bu nedenle, başlatıcı listelerini kullanamıyorum. Bunun dışında ben reset
tercih ediyorum bundan
owner() : owned(new someObject())
{}
bir işe yaramaz ara oluşturmayın olarak:
Geç olduğunu biliyorum, ancak gelecekteki okuyucular için. Scott Meyers'e göre Effective Modern C++ adlı kitabında, istisna güvenliği sağladığı için std :: make_unique tercih edilir: owner = std :: make_unique (). Sorun şu ki, std :: make_unique , C++ 14'ün (C++ 11 değil) bir parçasıdır, ancak burada [burada] bulabilirsiniz (https://isocpp.org/files/papers/N3656.txt) a kopyalayıp yapıştırabileceğiniz iyi bir uygulama. –