我有这段代码,我想知道内存分配。
void f(){
static A a;
//Other things...
}
class A {
public:
A();
private:
AnotherObjectType anotherObject;
};
anotherObject
将被分配到哪里?在 static
代码段或其他地方? anotherObject
是否有被覆盖的风险? (f
将被调用多次)。
最佳答案
所有非堆对象都将在静态段中,在 f() 的静态 A 实例中。
关于覆盖,如果您在多线程代码中使用各种单例习语,则在较旧的 C/C++ 中可能会发生这种情况。但是例如较新的 gcc 版本使用新的标准要求对静态对象进行自动线程安全初始化。参见例如Is local static variable initialization thread-safe in C++11?
关于c++ - 静态对象的非静态成员分配在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29669293/