0

以下面的简单代码为例。d是堆栈上的指针,指向demo堆上的对象。该对象包含val. 这似乎是类上下文中的堆栈变量,但对象是在堆上分配的。. . . 那么到底在哪里val

class demo
{
    int val;

public:
    demo() : val(5) {};
};

demo* d = new demo();
4

2 回答 2

2

该变量val位于堆上,因为它是位于堆上的对象的一部分。每个线程都有自己的堆栈,但单个对象没有。只有在静态声明val时才会位于堆栈上。d

于 2013-06-27T11:33:08.303 回答
1

无论对象存储在堆栈还是堆中,val始终与第一个成员位于演示对象的相同内存地址。

§1.8.6

除非对象是位域或大小为零的基类子对象,否则该对象的地址就是它占用的第一个字节的地址。既不是位字段也不是零大小的基类子对象的两个不同对象应具有不同的地址。

于 2013-06-27T11:44:29.200 回答