什么"这"是指对象是否在堆栈中?

时间:2017-04-04 19:42:18

标签: c++

要考虑这个指针(从我可以告诉它本身不是一个指针,而是一个导致对象地址的表达式)并开始怀疑"这个&# 34;实际上是指在函数范围内创建和销毁对象的时间?所以不是使用" new"运营商。所以像这样:

void Foo()
{
    SomeObject o;
}

如上所述创建对象时会发生什么,以及""什么时候?

2 个答案:

答案 0 :(得分:7)

this是指向该对象的指针,在其成员函数的范围内。

每个对象都有一个地址,无论它是如何分配的,或者它的存储持续时间是多少。因此,无论您使用new是否无关紧要。

但是,您会发现动态分配的对象的地址在数字上远离其他对象的地址,因为它们通常存储在虚拟内存中的不同位置(您的“堆”与“堆栈”命名法)。

答案 1 :(得分:1)

C指针不仅限于手动分配内存,它们可以指向内存的任何部分。包括非设计用于变量的区域,例如代码段,它是存储机器指令的内存部分。

您可以将指针视为计算机RAM的一种大索引。并且RAM是一个很大的字节数组。

当您声明一个对象时,就像在您的示例中一样,编译器将内存带到某处。这个内存有自己的地址(我上面谈到的大索引),我们可以像任何其他内存地址一样使用它。

因此,在您的情况下,如果您声明:

SomeObject O;

...然后"这"指针具有与manualy声明的指针相同的值,如:

SomeObject 0;
SomeObject *MyThis = &O;