我有一个 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;
但是,就像我说的那样,这很可能是一个糟糕的设计,并且存在多线程问题。