如果a类实例被声明为a,它将在内存中的位置

Where the a class instance will be located on memory if it is declared as A a?

本文关键字:内存 位置 实例 声明 如果      更新时间:2023-10-16

如果声明类A的实例:"一个";将在哪种内存类型上创建它?还有其他类型的内存吗?

我的解决方案:

这取决于它的声明位置。如果它是一个全局变量,并且在任何类和函数之外,则它位于堆上。如果它在类或函数中,则在堆栈上。

对吧?

你的问题假设只有两个答案是"stack"answers"heap"。

在函数或类/联合之外声明的所有变量都位于全局内存中。这就是为什么它们通常被称为"全局"。这些内存是通过加载可执行文件创建的,这些类的构造函数在main执行之前被调用(析构函数在main执行之后被调用)。

如果在函数内部声明变量,则该变量位于堆栈中。进入"堆"的唯一方法是,如果你用new显式地分配它,或者如果它是其他对象的成员,它本身被分配。

类/联合的成员存在于声明其变量的地方

如果它是函数的局部,它在堆栈上。如果它是全局的或静态的,它在可执行程序的数据段(AAKA"全局内存")中。如果它是另一个类中的声明,则可以在任何位置,这取决于如何分配类的实例。

Namespace不影响任何内容。它只是为编译器准备的。

编辑:classes.

如果一个实例被声明为A a;,并且这个声明恰好在一个类中,像这样:

class B
{
    A a;
};

a的内存位置由B的封闭实例的分配方式决定。例如,在B b;的情况下,同样的规则适用-堆栈或全局内存。如果是

B * B = new B(); 但是,如果

,那么您的A将与其他B一起存在于堆中。