单例继承 - 创建哪个对象?

问题描述 投票:0回答:1

我创建了两个类 - 基类和派生类,其中基类是单例。

当我调用派生类构造函数时,哪个对象被创建为静态实例?它是基类对象还是派生类对象,为什么?

#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

我尝试打印尺寸值,但我无法连接为什么要创建基类对象。

c++ inheritance design-patterns singleton
1个回答
0
投票

只创建一个对象,其类型为DerivedSingleton。这是因为 DerivedSingleton::getInstance() 被调用,并且它确保整个程序中仅存在一个 DerivedSingleton 实例。

© www.soinside.com 2019 - 2024. All rights reserved.