使用非静态成员变量的静态变量初始化

时间:2016-12-22 08:40:48

标签: c++

在我正在工作的项目中,我在代码审查过程中看到了如下代码:

class A 
{
   shared_ptr<B> instanceB; 
}

A::A ()
{
   instanceB = make_shared<B>();
   static C localVariable(instanceB.get());
}

我知道静态变量类似于全局变量,将在程序启动时创建,并且在实例化时将创建instanceB。这可能会崩溃。

在解释我开始考虑instanceB.get()将返回什么值时。最可能垃圾对吗?当我想到更多的时候 我相信这段代码甚至不应该被编译为什么允许静态变量在其ctors中获取非静态参数?

1 个答案:

答案 0 :(得分:8)

  

将在程序启动时创建

不,那是错的。函数中的静态变量是在第一次执行该函数时创建的。因此,当localVariable首次投放时,instanceB.get()会收到A::A()将返回的内容。因此localVariable中不会有垃圾。

这样的设计可能看起来确实很奇怪,但它在语法上是正确的,并且对于编译器具有明确定义的含义。此外,在经典的单例实现中使用了非常相似的设计。