gpt4 book ai didi

c++ - 如何使用非平凡构造函数初始化静态类成员?

转载 作者:可可西里 更新时间:2023-11-01 13:54:48 25 4
gpt4 key购买 nike

这在 C# 中很简单,但在 C++( native 、Win32、Visual C++)中我看不到解决方案。所以,我有一个带有非平凡构造函数的 MyClass1 类,在 MyClass2 中,我想拥有 MyClass1 类型的静态成员:

MyClass1.h:

class MyClass1 
{
public MyClass1(type1 arg1, type2 arg2);
}

MyClass2.h:

class MyClass2
{
public:
static MyClass1 Field1;
}

和 MyClass2.cpp:

MyClass1 MyClass2::Field1(arg1, arg2);

我希望这样的代码将初始化 MyClass2::Field 并在此初始化期间调用 MyClass1 构造函数。但是,看起来编译器只为 Class1 分配内存,并且从不调用构造函数,就像我这样做一样:

MyClass1 MyClass2::Field1 = *(MyClass1 *)malloc(sizeof(MyClass1));

在 C++ 中是否有任何“官方”方法来使用非平凡构造函数初始化静态类成员?

最佳答案

您可能会遇到 Static Initialization Order Fiasco .类或命名空间作用域的静态变量在 main() 执行之前初始化,但初始化顺序取决于链接时因素。

要解决此问题,请使用 Construct on First Use Idiom ,它利用了函数范围静态在首次调用函数时初始化的事实。

关于c++ - 如何使用非平凡构造函数初始化静态类成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14568639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com