Có một số lớp tương đương cho std :: C++ duy nhất trong các thư viện tăng không? Hành vi tôi đang tìm kiếm là có thể có chức năng nhà máy an toàn ngoại lệ, như vậy ...unique_ptr boost tương đương?
std::unique_ptr<Base> create_base()
{
return std::unique_ptr<Base>(new Derived);
}
void some_other_function()
{
std::unique_ptr<Base> b = create_base();
// Do some stuff with b that may or may not throw an exception...
// Now b is destructed automagically.
}
EDIT: Hiện tại, tôi đang sử dụng hack này, có vẻ như tốt nhất tôi có thể nhận được tại thời điểm này ...
Base* create_base()
{
return new Derived;
}
void some_other_function()
{
boost::scoped_ptr<Base> b = create_base();
// Do some stuff with b that may or may not throw an exception...
// Now b is deleted automagically.
}
Ngoài ra, hiệu ứng này có thể được tạo ra bằng cách làm cho hàm tạo bản sao có di chuyển ngữ nghĩa, sau đó kiểm tra hủy trước khi giải phóng? –