c++ - 静态对象的非静态成员分配在哪里?

标签 c++ object

我有这段代码,我想知道内存分配。

 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/

相关文章:

javascript - 观察vuejs中动态变化对象的变化

javascript - 如果鼠标指针太近则停止旋转图像

java - 如何在不影响原始对象值的情况下创建 HashMap 对象的副本

C++ 排序坐标存储为 vector 中的对象

c++ - 指向对象的指针 vector - 内存泄漏

c++ - MSVC编译器认为我正在引用已删除的函数,但据我所知,我不是

c++ - 函数的返回值如何工作?

c++ - 使用 XCODE 4.6.1 的 boost - 正确的build设置是什么?

C++ 右值 move 语义,关于流的问题

c# - 如何创建用于在 C# 中描述对象的自定义语法?