成员数组位于何处
Where is the member array located?
给定以下代码:
class MyClass
{
public:
char array[10];
};
int main()
{
MyClass *p = new MyClass;
...
}
据我了解 - new 在堆上分配对象。而且,数组是在堆栈上分配的(没有新的运算符(。
那么,数组是在堆上分配的(因为对象在堆上(还是在程序堆栈上分配的?
而且,数组是在堆栈上分配的(没有新的运算符(
否,数组是对象的成员。这是其中的一部分。如果对象是动态分配的,那么它的所有部分也是动态分配的。
注意,我说了它的所有部分。我们可以调整您的示例:
class MyClass
{
public:
char *p_array;
};
int main()
{
char array[10];
MyClass *p = new MyClass{array};
// Other code
}
现在,对象包含一个指针。指针是对象的成员,是动态分配的。但是它所持有的地址是具有自动存储持续时间的对象(数组(。
但是,现在数组不再是对象的一部分。这种分离使您心目中的布局成为可能。
> MyClass *p = new MyClass;
的真正含义是您希望在堆/免费存储区上分配sizeof(MyClass)
字节来存储MyClass
的每个成员。类的大小基于其成员。 array
是MyClass
的成员,因此MyClass
是在免费商店中分配的,所以array
也是如此。
相关文章:
- 在数组中输入 n 个整数的列表,并以类似于钟摆来回移动的方式排列它们. 输入-1 3 2 5 4,输出5 3 1 2 4
- C++未知长度字符串的数组,其行为类似于 Python 字符串列表
- C++函数,它将数组、谓词和运算符作为参数,并将运算符应用于满足谓词的数组元素
- 适用于大型数组的无复制线程安全环形缓冲区
- C++中用于结构的纯数组的类似于TableView/DataFrame的通用功能
- 为什么std::begin()和std::end()适用于固定数组,而不适用于动态数组
- 通过矢量下标访问 Fortran 数组,相当于 cpp
- 使用不同的整数组装字符数组以类似于日期和时间
- 如何在C 中创建类似于Python的Numpy数组的数组
- 如何将单独的数组分组在一起(类似于按一列对表进行排序)
- 将二进制操作员应用于数组中的每个元素
- 最小的正乘数,当应用于数组时,使数组成为积分
- C++相当于 Python 的:用于数组索引
- 将函子应用于设备数组的子集的最有效方法是什么
- 如何检查字符串值是否存在于字符数组中
- 为什么 strlen() 也适用于字符数组
- 应用于单词数组的随机数范围
- 如果将 delete[] 应用于非数组指针会发生什么情况
- 一个类似于动态数组的C++容器
- 为什么只有非常量映射提供类似于关联数组的直接元素检索?