一个简单问题向大家请教?

oiouin 2008-02-25 10:15:11
如果有两个类如下:
class Class1
{
}
class Class2
{
Class1 myClass1;
}
如果我在定义Class2时用new,如下:
Class2 * myClass2 = new Class2;
myClass2 应该是在堆中分配内存,但myClass1 是在堆中分配还是在栈中分配?
如果我想整个myClass2 中的所有变量全在堆中分配应如何做?
我是新手,请指教?
谢谢!!!

...全文
404 33 打赏 收藏 举报
写回复
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
lixkyx 2009-07-31
  • 打赏
  • 举报
回复
动态申请的变量在堆里,其他变量均在栈中。
oiouin 2008-03-04
  • 打赏
  • 举报
回复
有说堆,有说栈,不知道哪个对!
天亮后说晚安 2008-03-04
  • 打赏
  • 举报
回复
栈上
oiouin 2008-03-04
  • 打赏
  • 举报
回复
ok
oiouin 2008-03-01
  • 打赏
  • 举报
回复
up
oiouin 2008-02-29
  • 打赏
  • 举报
回复
ok
oiouin 2008-02-28
  • 打赏
  • 举报
回复
上面的结果是不是说明,内存并不分配在一起?也就是不是全在堆上?
请指教?
oiouin 2008-02-28
  • 打赏
  • 举报
回复
楼上输出如下:
12ff60,3a9f90
12ff54
3a9f90
3a9f90
3a9f94
3a9f98
这个结查说明什么?不在一块?对不?
oiouin 2008-02-28
  • 打赏
  • 举报
回复
up
Jerry_Chow 2008-02-26
  • 打赏
  • 举报
回复
这样改写下,你也许会清楚些.


/*
class Class1
{
} */
//用int替代class1
class Class2
{
int val;
}

Class2 *p = new Class2; //class2的对象在堆上分配,这也包括那个val.p是指向堆上内存的一个指针

wjlsmail 2008-02-26
  • 打赏
  • 举报
回复

// 参考:
#include "stdafx.h"

class CTest1
{
public:
int m_i;
int m_j;
};

class CTest2
{
public:
CTest1 m_test1;
int m_i;
};

int _tmain(int argc, _TCHAR* argv[])
{
CTest2 * pTest2 = new CTest2;
int i = 0;
printf("%x, %x\n", &pTest2, pTest2);
printf("%x\n", &i);
printf("%x\n", &(pTest2->m_test1));
printf("%x\n", &(pTest2->m_test1.m_i));
printf("%x\n", &(pTest2->m_test1.m_j));
printf("%x\n", &(pTest2->m_i));
delete pTest2;
pTest2 = NULL;
return 0;
}
happynxy 2008-02-26
  • 打赏
  • 举报
回复
myClass1 应该是也在堆上的吧
hastings 2008-02-25
  • 打赏
  • 举报
回复
Class1组成了Class2的内存大小。
星羽 2008-02-25
  • 打赏
  • 举报
回复

都在堆上
wnl0008 2008-02-25
  • 打赏
  • 举报
回复
总之new总是在堆上分配内存,所以myClass1是在堆上分配的内存,myClass2析构时系统会自动调用myClass1的析构函数
oiouin 2008-02-25
  • 打赏
  • 举报
回复
9楼的意思是class1是在栈上分配,不在堆上分配?要和class2那样,new后才是在堆上分配的.但楼上有人说它直接就是在堆上分配的,不知哪种说法对?
独孤过儿 2008-02-25
  • 打赏
  • 举报
回复
把class2中的那个class1成员写成指针的形式,然后在class2的构造函数中new内存给那个指针

class2的对象也通过new来产生,这样class2的所有成员就都在堆上了...
babyvox1999 2008-02-25
  • 打赏
  • 举报
回复
搞不懂,如果在堆上,那为什么它占用的内存系统会自动释放
===============================
你不delete不会自己释放的
oiouin 2008-02-25
  • 打赏
  • 举报
回复
搞不懂,如果在堆上,那为什么它占用的内存系统会自动释放?如果在栈上,我想整个类的所有成员全在堆上创建,那该如何做?
HelloDan 2008-02-25
  • 打赏
  • 举报
回复
应该在堆,又不是保存一个指向它的指针的,是连续的。
加载更多回复(13)
发帖
C++ 语言

6.3w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
帖子事件
创建了帖子
2008-02-25 10:15
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下