【发布时间】:2014-08-14 21:48:59
【问题描述】:
我刚收到一个关于 c++ 类成员存储的问题。
例如,我有一个这样的类:
class MyClass1{
int a;
int b[4];
int c;
}
在主函数中:
int main(){
MyClass1 class1;
MyClass1* class_ptr1= new MyClass1();
}
那么成员 a,b,c 是如何存储的呢?对于class1,我认为所有成员都在堆栈中分配了一个空间,甚至是数组b。
那么 class_ptr1 呢?显然它是动态分配的,成员也是动态分配的,即使它们不是指针。
非常感谢。
非常感谢您的回复。现在我明白了,一旦类被动态分配,它的所有成员也是动态分配的。在这种情况下,一旦我完成使用该类,我是否需要做任何事情来释放它们?我的意思是,是否可以:
delete(class_ptr1);
或者我需要先释放它的成员。
【问题讨论】:
-
"现在我明白了,一旦类被动态分配,它的所有成员也是动态分配的。"你理解错了。没有“也”。看我的回答。
-
@Slava 你的意思是不是这样吗?
-
@LuchianGrigore 我的意思是“它的所有成员也动态分配”的说法是不正确的。但这并不意味着它们是分开分配的。
-
@Slava 你能举一个动态分配对象并且它的成员不在动态内存中的例子吗?
-
@LuchianGrigore OP 发表声明的方式高度表明他认为他班级的每个成员都是动态分配的,就好像你轮流对他们每个人都调用了 new 一样,这就是声明Slava 否认了,当然,如果实例本身就是实例的每个成员都在动态内存中,因为实例只不过是它的成员:)