Bạn cũng có thể muốn làm cho các nhà xây dựng bản sao tin cũng hay với mới C++ 11 cú pháp bạn có thể nói một cách rõ ràng các trình biên dịch không sao chép nó và làm cho các nhà xây dựng mặc định riêng với một cái gì đó như thế này:
struct NonCopyable {
NonCopyable & operator=(const NonCopyable&) = delete;
NonCopyable(const NonCopyable&) = delete;
NonCopyable() = default;
};
class A : NonCopyable {
public:
static std::shared_ptr<A> newA()
{
// Some code, logging, ...
return std::make_shared<A>();
}
private:
A() {} // Default constructor
};
Cách C++ 03 thường giống như sau:
class A {
public:
static A* newA()
{
// Some code, logging, ...
return new A();
}
private:
A() {} // no outsider default constructor
A(const A& rhs); // no copy
A& operator=(const A& rhs); // no assignment
};
int main()
{
A x; // C2248
A y(x); // C2248
x = y; // C2248
A* p = A::newA(); // OK
std::cin.get();
return 0;
}
Độc thân là ác. Xem tại đây: http://programmers.stackexchange.com/questions/40373/so-singletons-are-bad-then-what –
@Truth: Đây không giống như một singleton. –
@OliCharlesworth: Một nhà máy trả về một thể hiện của chính nó và ngăn chặn bất kỳ ai khác khởi tạo nó? Có vẻ rất nguy hiểm. –