Với tình huống chung mà tuổi thọ của một đối tượng sở hữu được liên kết với chủ sở hữu của nó, tôi có thể sử dụng một con trỏ duy nhất theo một trong 2 cách. .Tôi có nên gán hoặc đặt lại unique_ptr không?
Nó có thể được gán:
class owner
{
std::unique_ptr<someObject> owned;
public:
owner()
{
owned=std::unique_ptr<someObject>(new someObject());
}
};
Phương pháp khôi phục có thể được sử dụng:
class owner
{
std::unique_ptr<someObject> owned;
public:
owner()
{
owned.reset(new someObject());
}
};
Trong lợi ích của thực hành tốt nhất, tôi nên thích một hình thức khác không?
EDIT: Xin lỗi các bạn. Tôi đã đơn giản hóa điều này. Việc phân bổ đống xảy ra trong một phương thức khởi tạo và không phải trong ctor. Vì vậy, tôi không thể sử dụng danh sách khởi tạo.
Tôi biết đã muộn nhưng chỉ dành cho người đọc trong tương lai. Theo Scott Meyers trong cuốn sách Modern Modern C++, std :: make_unique là thích hợp hơn, vì nó cung cấp sự an toàn ngoại lệ: owner = std :: make_unique (). Vấn đề là std :: make_unique là một phần của C++ 14 (không phải C++ 11), nhưng ở đây bạn có thể tìm thấy [ở đây] (https://isocpp.org/files/papers/N3656.txt) một thực hiện tốt mà bạn có thể sao chép-dán. –