【发布时间】:2013-11-28 08:38:22
【问题描述】:
我正在尝试使用 C++11 实现一个类似单例的对象。我从另一个用户那里得到了这个例子。
它使用构造函数和复制构造函数私有和默认创建一个对象,以及一个返回静态对象的 instance() 函数。
据我了解,这应该会阻止创建此对象的两个实例。但正如您在我的 main.cpp 中看到的那样,我创建了两个实例,它编译并运行。
我的对象创建错误还是什么?没看懂。
object.hpp:
#ifndef OBJECT_H
#define OBJECT_H
#include <iostream>
using namespace std;
class Object
{
private:
Object() = default;
Object(const Object&) = delete;
public:
// Singleton in C++11
static Object& instance() { static Object z; return z; }
};
#endif // OBJECT_H
main.cpp:
#include "object.hpp"
int main()
{
Object* object = new Object();
object->instance();
Object* object2 = new Object();
object->instance();
return 0;
}
【问题讨论】:
-
也许这是
= default的怪异规则之一。如果我使用Object(){}而不是Object() = default;我会得到想要的结果(new不起作用。) -
准确使用术语:“它使用构造函数和副本创建对象......”。实际上它创建了一个类:)。也许命名一个类“对象”不是最好的主意;)
-
你是对的,alfC,如果我使用
Object() {},我的编译器也会抱怨new命令。关于= default还有更奇怪的规则吗?
标签: c++11 singleton private-constructor