非静态成员变量的静态变量初始化
Static variable initialization with non static member variable
在项目中,我正在工作,我在代码审查过程中看到了下面的代码:
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
中不会垃圾。
这样的设计确实看起来很奇怪,但是在语法上是正确的,并且对编译器具有明确的含义。此外,在经典的单例实现中使用了非常相似的设计。
相关文章:
- 为什么C++有不同的变量初始化方式?
- 静态 constexpr 成员变量初始化
- C++不同的变量初始化
- 全局和局部变量初始化与 constexpr 的差异背后的基本原理
- 是变量初始化失败吗?
- 视觉C++:在 DLL 加载期间,全局变量初始化顺序是否具有确定性?
- 类静态变量初始化顺序
- 使用 constinit 变量初始化 constexpr 变量
- 是否可以在不修改父类的情况下将成员变量初始化推迟到继承的类?
- 使用全局变量初始化不同编译单元中的其他全局变量
- 使用默认构造函数引用成员变量初始化错误
- 宏的 if 语句中的变量初始化
- 不稳定的C :每行适应性变化多变量初始化
- 同一函数中的静态函数变量初始化顺序
- C 语言中的静态变量初始化
- 错误:调用'begin(long double [nPoints])'没有匹配函数;使用硬编码的 int 与整数变量初始化向量
- 类POD成员变量初始化
- 尝试捕获类变量初始化的范围
- 共享库中 __attribute__((构造函数)) 的全局/静态变量初始化问题
- 多变量初始化编译器支持