C++中Obj类成员arr存储位置问询:栈还是堆?
关于Obj类成员数组arr的内存位置问题解答
- 当obj通过
std::make_unique动态分配时,arr位于堆内存中。因为std::make_unique<Obj>()会在堆上分配完整的Obj对象,而arr是Obj类的成员数组,属于Obj对象的组成部分,会随整个对象一同被分配在堆上。 - 若移除Obj2类,直接在main函数中动态分配obj,arr的存储位置不会变化。只要Obj对象是通过动态分配(比如
std::make_unique、new)创建的,它的所有成员(包括arr)都会作为对象的一部分存放在堆上。成员的存储位置仅取决于所属对象的分配方式,与对象被哪个类或函数持有无关。
补充:如果是在栈上创建Obj对象(例如
Obj obj;),那arr才会位于栈内存中;但只要是动态分配的Obj实例,其成员必然随对象在堆上。
内容的提问来源于stack exchange,提问作者Rich Gg
相关产品推荐
相关产品推荐

