Một đồng nghiệp đã khăng khăng sử dụng Singleton của Meyer cho tất cả các biến con trỏ toàn cục là "không có gì đảm bảo việc xây dựng toàn cầu unique_ptr
sẽ không bị ném". Vì vậy, thay vì:Khi nào cần thay thế một tiêu chuẩn toàn cục :: unique_ptr với một singleton
#include <memory>
std::unique_ptr<Foo> ptr(nullptr); // Apparently this isn't safe.
int main(/*blah*/)
{
ptr.reset(new Foo());
}
Bây giờ chúng ta có
unique_ptr<Foo> singleton
{
try
{
static unique_ptr<Foo> ptr();
return ptr;
}
catch (...)
{
std::cerr << "Failed to create single instance\n";
exit(1);
}
return unique_ptr<Type>();
}
int main()
{
}
Đối với tôi điều này dường như là một giải pháp tìm kiếm một vấn đề. Anh ta có điểm không?
Ngoài ra, tôi sẽ lập luận rằng bắt ngoại lệ, và sau đó thực hiện một lối ra (và loại bỏ bất kỳ cơ hội nào để tìm ra lý do tại sao nó thất bại), có vẻ như là một ý tưởng tồi tệ hơn. Hầu hết các hệ thống, một ngoại lệ unhandled chấm dứt và tạo ra đầu ra gỡ lỗi (chẳng hạn như một tệp lõi). –