这可能吗?
class A {
static A *instance = NULL;
public:
A () {
if (instance) {
this = instance;
} else {
instance = this;
}
}
}
是否有泄密记忆?
我是否需要过载new
运算符?
答案 0 :(得分:2)
没有。忽略编译器错误,您的课程将无法正常工作。
@Galik has provided invaluable sources了解你如何构建一个单身人士。但是让我们看看你的。
class A {
static A *instance = NULL; // NULL isn't even a thing, but assuming you mean nullptr you can't assign a static like this
public:
A () {
if (instance) {
this = instance; // this can't be assigned
} else {
instance = this; // this is correct
}
}
};
哪个可以提供以下内容:
class A {
static A *instance;
public:
A () {
// if there's no instance, this is the one we'll use
if (!instance) {
instance = this;
}
}
};
A* A::instance = nullptr;
无论如何,这并不能阻止你构建多个。
答案 1 :(得分:1)
您无法为此
指定值答案 2 :(得分:1)
不可能。如果公开并调用构造函数,则不可避免地会创建A
的新对象。最优雅和广泛使用的C ++单例类实现使用静态方法返回单个静态实例,同时隐藏(例如make private
可访问的)构造函数。
以下是一个例子:
class A {
private:
static A *instance_; // use nullptr since C++11
A() {}
public:
static A& instance() {
if (!instance_)
instance_ = new A();
return *instance_;
}
};
A* A::instance_ = nullptr;