Si consiglia inoltre di fare il costruttore di copia privata, come bene o con la nuova sintassi C++ 11 si può dire esplicitamente al compilatore di non copiarlo e rendere il costruttore di default privato con qualcosa di simile:
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
};
Il modo in cui C++ 03 era di solito qualcosa di simile:
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;
}
Singletons sono il male. Vedi qui: http://programmers.stackexchange.com/questions/40373/so-singletons-are-bad-then-what –
@Truth: non sembra un singleton. –
@OliCharlesworth: una factory che restituisce un'istanza di se stessa e impedisce a chiunque altro di renderla istantanea? Sembra pericolosamente vicino. –