我有一个C++类(class1),其中包含另一个类(class2)的静态对象作为私有成员。
我知道在使用程序时,我必须初始化静态对象,我可以使用默认构造函数进行此操作(不希望的值)。
是否可能仅在创建包含类(class1)的对象时初始化静态对象,并仅初始化一次,以我的所需值为准?
将不胜感激任何帮助。
我有一个C++类(class1),其中包含另一个类(class2)的静态对象作为私有成员。
我知道在使用程序时,我必须初始化静态对象,我可以使用默认构造函数进行此操作(不希望的值)。
是否可能仅在创建包含类(class1)的对象时初始化静态对象,并仅初始化一次,以我的所需值为准?
将不胜感激任何帮助。
// interface
class A {
static B b;
};
// implementation
B A::b(arguments, to, constructor); // or B A::b = something;
然而,即使您没有创建 A
类的实例,它也会被初始化。除非使用指针并在构造函数中初始化一次,否则无法以其他方式完成,但这可能是一个糟糕的设计。
如果您真的想要这样做,以下是方法:
// interface
class A {
A() {
if (!Bptr)
Bptr = new B(arguments, to, constructor);
// ... normal code
}
B* Bptr;
};
// implementation
B* A::Bptr = nullptr;
不过,正如我所说的那样,这很可能是一种糟糕的设计,并且会存在多线程问题。
B
不仅仅是供 A
使用的。 - Seth Carnegie
Bptr = new B(arguments, to, constructor);
不是初始化。初始化是B* A::Bptr = nullptr;
。 - John Dibling