当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《推迟C++静态对象构建-Linux上的GCC》经验,为你挑选了1个好方法。

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

想象一下,我无法访问它的源代码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.

    必须有一个名为myInstancetype 的实例变量MyClass(我无法将逻辑更改为MyClass *pMyInstance).

非常感谢阅读.



1> James Adkiso..:

因为你已经限制了new无法使用的问题.您应该能够始终创建对象并将其复制到全局实例.例如:

MyClass createMyClass()
{
    doGlobalSetup();
    return MyClass(1, 2, 3);
}

MyClass myInstance = createMyClass();

int main()
{
    myInstance.doSomething();

    return 0;
}

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有