我创建了两个类 - 基类和派生类,其中基类是单例。
当我调用派生类构造函数时,哪个对象被创建为静态实例?它是基类对象还是派生类对象,为什么?
如
#include <iostream>
class Singleton {
protected:
static Singleton* instance;
Singleton() {}
public:
static Singleton* getInstance() {
if (!instance) {
instance = new Singleton();
}
return instance;
}
};
Singleton* Singleton::instance= nullptr;;
class DerivedSingleton : public Singleton {
public:
int x;
static DerivedSingleton* getInstance() {
if (!instance) {
instance = new DerivedSingleton();
}
return (DerivedSingleton*)instance;
}
};
int main(){
Singleton *instance = DerivedSingleton::getInstance();
std::cout << sizeof(DerivedSingleton) << std::endl;
std::cout << sizeof(*instance) << std::endl;
std::cout << sizeof(Singleton) << std::endl;
}
输出:
4
1
1
我尝试打印尺寸值,但我无法连接为什么要创建基类对象。
只创建一个对象,其类型为DerivedSingleton。这是因为 DerivedSingleton::getInstance() 被调用,并且它确保整个程序中仅存在一个 DerivedSingleton 实例。