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

Static variable initialization with non static member variable

本文关键字:变量 初始化 静态 静态成员      更新时间:2023-10-16

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

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

我知道静态变量就像全球变量,并且在实例化时将创建程序b时创建静态变量。这可能会崩溃。

在解释我开始考虑将返回的value instressb.get()时。最可能垃圾对吗?当我对此有更多的思考我相信该代码甚至不应该编译,为什么允许静态变量在其CTOR中采用非静态参数?

并将在程序启动

时创建

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

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