社区
C++ 语言
帖子详情
C++中的类对象实例化
jieao111
2008-04-18 11:33:33
对方:C++中的类对象实例化后存在内存中的什么位置,堆还是栈?
堆和栈都有可能,回答是对的
不是在普通内存区或者堆里吗,还有栈吗
...全文
865
22
打赏
收藏
C++中的类对象实例化
对方:C++中的类对象实例化后存在内存中的什么位置,堆还是栈? 堆和栈都有可能,回答是对的 不是在普通内存区或者堆里吗,还有栈吗
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
22 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
coverallwangp
2008-04-20
打赏
举报
回复
就是除了堆和栈之外的存储区。
jieao111
2008-04-20
打赏
举报
回复
[Quote=引用 16 楼 coverallwangp 的回复:]
动态创建对象时,如用new、malloc等是在堆里创建的
在一个函数内部创建对象时,是在栈里面创建的
全局对象、静态对象是在你所谓的"普通存储区"创建
[/Quote]
本来要结帖的。。又出来16楼,按一线天的说法,就没有"普通存储区"这个说法,,那么16楼说的全局对象又创建在哪呢
jieao111
2008-04-20
打赏
举报
回复
这个放着,有时间的话,好好研究下。。呵呵。。算法ing!!!
coverallwangp
2008-04-20
打赏
举报
回复
动态创建对象时,如用new、malloc等是在堆里创建的
在一个函数内部创建对象时,是在栈里面创建的
全局对象、静态对象是在你所谓的"普通存储区"创建
arong1234
2008-04-20
打赏
举报
回复
我觉得你还是把C++学完再搞这个吧,你还可以自定义new,这时放哪就不知道了,你可以自己决定放哪
[Quote=引用 14 楼 jieao111 的回复:]
也就是说在对象初始化时,只有两种可能,堆内的内存和栈内的内存
[/Quote]
jieao111
2008-04-20
打赏
举报
回复
也就是说在对象初始化时,只有两种可能,堆内的内存和栈内的内存
MagiSu
2008-04-20
打赏
举报
回复
[Quote=引用 21 楼 flyingpig4945 的回复:]
内存分为:
栈:就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。
堆:就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。
自由存储区:就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。…
[/Quote]
这个问题是,new往往申请内存是用malloc来啊?!
flyingpig4945
2008-04-20
打赏
举报
回复
内存分为:
栈
:就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。
堆
:就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。
自由存储区
:就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。
全局/静态存储区
:全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分了,他们共同占用同一块内存区。
常量存储区
:这是一块比较特殊的存储区,他们里面存放的是常量,一般情况下不允许修改
引自某blog
godfile
2008-04-20
打赏
举报
回复
内存可分为四块:程序代码区,全局变量区,堆区,栈区
huang_8228
2008-04-19
打赏
举报
回复
[Quote=引用 6 楼 morre 的回复:]
1. 你没有使用new函数来实例化对象
2. 对象构造函数及其他成员函数没有使用new函数
满足以上两点,那么对象就在栈里,反之对象(至少一部分)就在堆中
[/Quote]
楼上少讲了一点,除了new以外还有malloc(),calloc(),realloc()等内存分配函数会在堆上面分配内存的。
arong1234
2008-04-19
打赏
举报
回复
class MyClass;
void Func(){
MyClass a; //这在栈
MyClass *pA=new MyClass;//这在堆
HelloDan
2008-04-19
打赏
举报
回复
malloc呢?
morre
2008-04-19
打赏
举报
回复
1. 你没有使用new函数来实例化对象
2. 对象构造函数及其他成员函数没有使用new函数
满足以上两点,那么对象就在栈里,反之对象(至少一部分)就在堆中
HelloDan
2008-04-19
打赏
举报
回复
[Quote=引用 3 楼 jieao111 的回复:]
什么时候在栈,什么时候在普通内存区
[/Quote]
这样的问题百毒一下有很多,自己动一下手吧。我也是那样找来看的。
iambic
2008-04-19
打赏
举报
回复
什么叫普通内存区?
arong1234
2008-04-19
打赏
举报
回复
没有听说过普通内存区得概念,也许他指得是VirtualAlloc分配得内存,但是这一般和对象分配没啥关系
[Quote=引用 11 楼 jieao111 的回复:]
引用 4 楼 iambic 的回复:
什么叫普通内存区?
难道我们的老师误导我了。。。他给我讲一般分配内存有3种情况。。普通内存区,栈(需要保护现场),堆(new,..),,这个有问题吗
[/Quote]
arong1234
2008-04-19
打赏
举报
回复
我没有少讲,类对象是不应该用malloc, calloc,realloc进行分配得
而calloc应该是在栈上分配,而不是堆上
[Quote=引用 9 楼 huang_8228 的回复:]
引用 6 楼 morre 的回复:
1. 你没有使用new函数来实例化对象
2. 对象构造函数及其他成员函数没有使用new函数
满足以上两点,那么对象就在栈里,反之对象(至少一部分)就在堆中
楼上少讲了一点,除了new以外还有malloc(),calloc(),realloc()等内存分配函数会在堆上面分配内存的。
[/Quote]
jieao111
2008-04-19
打赏
举报
回复
[Quote=引用 4 楼 iambic 的回复:]
什么叫普通内存区?
[/Quote]
难道我们的老师误导我了。。。他给我讲一般分配内存有3种情况。。普通内存区,栈(需要保护现场),堆(new,..),,这个有问题吗
自由建客
2008-04-19
打赏
举报
回复
int a; //栈
int* p=new int; //堆
jieao111
2008-04-18
打赏
举报
回复
什么时候在栈,什么时候在普通内存区
加载更多回复(2)
C++
类模板
实例化
类模板
实例化
2.1 隐式
实例化
(Implicit instantiation)2.2 显示
实例化
(Explicit instantiation)2.3 类模板
中
的静态成员 1. 简介 该文章主要总结
C++
类模板
实例化
的方法。类模板的
实例化
包含两种: 隐式
实例化
...
C++
类的
实例化
方法
C++
中
类的
实例化
有两种方式——在栈
中
实例化
和在堆
中
实例化
在栈
中
实例化
为静态分配内存,不需要手动回收,超出内存系统报错。例如:Student a或者Student a[3],使用“.”操作符,声明即调用了构造函数(已分配了...
C++
中
类的
实例化
的方法
C++
中
类的
实例化
的方法 类的
实例化
按照在分配内存上面的不同大体分为在:栈
中
的分配内存和堆
中
的内存的分配,于是分为下面三种方式。 class CEmployee { private: int age; int id; public: CEmployee() { cout <...
C++
实例化
对象
实例化
对象: 意味着一定有调用构造函数
实例化
就是给,数据成员分配内存,构造对象。对象的成员函数和普通函数的区别就是,成员函数有个指向当前对象的this指针,可以访问对象的成员变量,其依赖于对象。静态函数...
C++
类的
实例化
C++
中
类的
实例化
有两种方式——在栈
中
实例化
和在堆
中
实例化
在栈
中
实例化
为静态分配内存,不需要手动回收,超出内存系统报错。 在堆
中
实例化
为动态分配内存,需要使用delete回收。 /*以上省略掉类代码*/ int ...
C++ 语言
64,654
社区成员
250,484
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章