我想在特定实例的构造函数中初始化静态成员变量。这是一个坏主意吗?在实例的构造函数中初始化静态成员
情况如下。我有一个静态成员变量,这个类的所有实例应该共享。通常,我只是使用静态初始化器。但是,在构造函数被调用之前,我没有构造静态对象所需的必要信息。但是当然,我不想在每次构造函数被调用时创建一个新对象,所以我想要做这样的事情。
class Foo
{
static Bar * bar;
Foo(Xyz xyz);
};
Bar * Foo::bar = nullptr;
Foo::Foo(Xyz xyz)
{
if (Foo::bar == nullptr)
{
// initialize static bar
Foo::bar = new Bar(xyz);
}
}
我当然知道xyz
的migth是不同的调用的Foo
构造不同。这对我来说并不重要。
这是不好的软件设计吗?我感觉有点奇怪,在构造函数中初始化一个静态对象。但这与单件设计模式没有什么不同。所以也许它没关系?
编辑
感谢您的意见家伙。人们似乎并不喜欢这种设计。我将对其进行修改,以便在Foo
的第一个实例化之前创建一个Bar
,并在Foo
的构造函数中将Bar *
作为参数传递。每个Foo
将有一个指向Bar
的指针,我将确保所有Foo
都指向相同的Bar
。那个更好吗?
请注意,你不会做初始化。你将会做任务。 – NathanOliver
如何获得应该用于_initialization_的值?它仅在运行时才可用吗?顺便说一句,你的样本不会编译。 –
单线看起来没问题。多线程竞争条件。 –