c++中对象属性的内存分配
memory allocation of object attributes in c++
class A {
public:
int i;
};
int main() {
A *obj = new A();
return 0;
}
在下面的代码中,当创建A的对象时,它是在堆中创建的,但创建的obj中i的内存在哪里??它是在堆或堆栈上创建的,还是有不同的行为??
按原样,您的代码不会编译——
new
返回一个指针,您正试图将其分配给一个对象而不是指针(也许更习惯于Java?)
假设你解决了这个问题:
A *obj = new A();
obj
指向的整个对象都分配在堆上。其中包括i
的存储。obj
本身是一个指针,它被分配有auto
存储(即,通常在堆栈上)。
顺便说一句,你无论如何都想这么做是很不寻常的。大多数情况下,您只需定义一个对象(例如A obj;
),如果涉及任何堆分配,该对象将对其进行管理(包括在对象超出范围时清理存储)。
相关文章:
- Win32编译器选项和内存分配
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 当需要超过16GB的连续内存时,内存分配失败
- 尝试摆脱任何堆内存分配
- 以下代码执行哪种内存分配(动态或静态)?
- 开放 CV 中的动态内存分配,用于视频处理
- 为什么类和 main() 函数中也有动态内存分配
- 使用 NTAllocateVirtualMemory 和 GetProcAddress 的内存分配问题不起作用
- C++:矢量分配器行为、内存分配和智能指针
- 介于 [固定数组] 和 [带内存分配的指针] 之间的性能
- Linux C++ 中的页面对齐内存分配
- 整数内存分配/释放
- 将内存分配返回值强制转换为 TYPE 数组
- C++程序什么都不做,但瓦尔格林德显示内存分配
- 给定特定内存地址的数组的动态内存分配
- 如何完成内存分配
- 我刚刚了解了C++中的动态内存分配
- 在先前调用 string::find 后添加内存分配和内存集会导致它返回 npos.为什么?
- 对于堆上的页面对齐内存分配是否有任何优化或不同的 API?
- 无法删除布尔动态内存分配