想象一下,我有一个名为MyClass的C++类。

想象一下,我无权访问MyClass的源代码...它包含在一个库中,而我仅提供了MyClass的库和头文件。

想象一下,类本身需要环境预配置……例如,在可以调用类的构造函数之前,我需要进行一些设置。该类通常按以下方式使用:

void func() {
   doGlobalSetup();
   MyClass myInstance(1,2,3);
   myInstance.doSomething();
   ...
}

现在,我遇到了需要创建该类的全局实例的情况,例如:
MyClass myInstance(1,2,3);

int main(int argc, char *argv[]) {
   doGlobalSetup();
   myInstance.doSomething();
}

问题在于,在这个故事中,MyClass的实例是在调用doGlobalSetup()之前创建的。在调用main()之前将其实例化。我想要做的是将myInstance()的创建推迟到以后能够在实例化该类之前以某种方式运行doGlobalSetup()时。

这是实际故事的简化...因此,让我们假设:
  • 我无法更改MyClass的内部。
  • 必须有一个名为myInstance的实例变量,其类型为MyClass(我无法将逻辑更改为MyClass *pMyInstance)。

  • 非常感谢您的阅读。

    最佳答案

    由于已经解决了无法使用new的问题,因此您应该能够像往常一样创建对象并将其复制到全局实例。例如:

    MyClass createMyClass()
    {
        doGlobalSetup();
        return MyClass(1, 2, 3);
    }
    
    MyClass myInstance = createMyClass();
    
    int main()
    {
        myInstance.doSomething();
    
        return 0;
    }
    

    关于c++ - 推迟C++静态对象的构建-Linux上的GCC,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34439233/

    10-11 19:08
    查看更多