Tôi đã thường quen với việc thực hiện một mô hình singleton theo cách này vì nó rất dễ dàng:Có vấn đề với việc triển khai singleton này không?
class MyClass
{
public:
MyClass* GetInstance()
{
static MyClass instance;
return &instance;
}
private:
//Disallow copy construction, copy assignment, and external
//default construction.
};
Điều này có vẻ dễ dàng hơn so với việc tạo ra một con trỏ dụ tĩnh, khởi tạo nó trong tập tin nguồn, và sử dụng bộ nhớ động đáng kể phân bổ trong các chức năng dụ với bảo vệ.
Có một nhược điểm mà tôi không thấy không? Có vẻ như thread-an toàn với tôi bởi vì tôi sẽ nghĩ rằng thread đầu tiên để có được đến dòng đầu tiên sẽ gây ra instantiation - và nó có vẻ tốt đẹp và súc tích. Tôi thấy có phải là một vấn đề tôi không thấy vì điều này không phổ biến mặc dù tôi muốn nhận được một số phản hồi trước khi tôi tiếp tục sử dụng nó
Bạn có thể trả lại MyClass & thay vì MyClass * –
Ý của bạn, ngoài thực tế là đó là một singleton? http: // stackoverflow.com/q/137975/10077 –
Yeah, yeah Tôi biết họ là một anti-pattern và nên tránh :) Tôi vẫn quan tâm đến lý do tại sao điều này có thể không được thread-an toàn mặc dù. Tôi biết việc sửa đổi các thành viên dữ liệu của singleton nên được bảo vệ bằng mutex, nhưng tôi nghĩ rằng việc tạo ra thông qua chức năng này sẽ an toàn. –