c ++在类声明中初始化静态对象

时间:2012-05-08 13:27:40

标签: c++ static-members

我有一个C ++类(class1),另一个类(class2)的静态对象作为私有成员。

我知道在使用该程序时我将初始化静态对象,我可以使用默认构造函数(不需要的值)。

是否可以仅将静态对象初始化为我想要的值一次,并且只有在创建包含类(class1)的对象时才会这样做?

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:11)

// 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;

然而,就像我说的那样,这很可能是一个糟糕的设计,而且它有多线程问题。