【问题标题】:Where is the member array located?成员数组在哪里?
【发布时间】:2018-04-25 07:06:24
【问题描述】:

给定以下代码:

class MyClass
{
public:
    char array[10];
};

int main()
{
    MyClass *p = new MyClass;
...
}

据我了解 - new 在堆上分配对象。 而且,数组是在堆栈上分配的(没有 new 运算符)。

那么,数组是在堆上分配的(因为对象在堆上)还是在程序栈上?

【问题讨论】:

标签: c++


【解决方案1】:

而且,数组是在栈上分配的(没有 new 操作符)

不,数组是对象的成员。这是它的一部分。如果对象是动态分配的,那么它的所有部分也是。

注意我说的是它的部分。我们可以调整您的示例:

class MyClass
{
public:
    char *p_array;
};

int main()
{
    char array[10];
    MyClass *p = new MyClass{array};

    // Other code
}

现在对象包含一个指针。作为对象成员的指针是动态分配的。但是它持有的地址,是一个自动存储时长的对象(数组)。

然而,现在数组不再是对象的一部分。这种分离是使您想到的布局成为可能的原因。

【讨论】:

    【解决方案2】:

    MyClass *p = new MyClass; 的真正含义是您希望在堆/空闲存储上分配sizeof(MyClass) 字节来存储MyClass 的每个成员。类的大小取决于它的成员。 arrayMyClass 的成员,因此因为MyClass 是在免费存储上分配的,所以array 也是。

    【讨论】:

      猜你喜欢
      • 2012-04-11
      • 2019-07-15
      • 2015-01-07
      • 2011-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多