推迟C静态对象构建 – Linux上的GCC

前端之家收集整理的这篇文章主要介绍了推迟C静态对象构建 – Linux上的GCC前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
想象一下,我有一个名为MyClass的C类.

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

想象一下,类本身需要环境预配置……例如……在调用类的构造函数之前,我需要做一些设置.该类通常用于如下:

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

现在我遇到了需要创建类的全局实例的情况,例如:

MyClass myInstance(1,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,3);
}

MyClass myInstance = createMyClass();

int main()
{
    myInstance.doSomething();

    return 0;
}

猜你在找的C&C++相关文章