我在网上找到了这个单独设计模式的代码:
class Foo
{
public:
static Foo& getInstance()
{
static Foo instance;
return instance;
}
private:
Foo() {};
Foo(Foo const&);
Foo& operator=(Foo const&);
}
我不明白为什么需要构造函数Foo(Foo const&);
和Foo& operator=(Foo const&);
。有人可以向我解释一下吗?
答案 0 :(得分:5)
您不希望以下代码失败吗?
int main() {
// Utilizes the copy constructor
Foo x = Foo::getInstance();
Foo y = Foo::getInstance();
// Utilizes the operator=
x = Foo::getInstance();
}
请注意,我们已在该代码的末尾创建了3个Foo
的新实例。
答案 1 :(得分:2)
使用私有拷贝构造函数时,以下代码将无法编译:
Foo foo = Foo::getInstance(); // error: ‘Foo::Foo(const Foo&)’ is private
使用private无参数构造函数时,以下代码将无法编译:
Foo foo2; // error: ‘Foo::Foo()’ is private
您可以通过 getInstance()静态函数,使用此体操来确保使用您的单身人士的人将按照预期的方式使用它。
答案 2 :(得分:1)
复制构造函数和赋值运算符在private部分声明,未定义,这意味着实际上没有人可以使用它们,因此不能创建Foo
的副本。
请注意,在C ++ 11中,这可以通过更直接的方式实现:
// this can be even in public section
Foo(Foo const&) = delete;
Foo& operator=(Foo const&) = delete;