关于c++ 和c# 中用new 与不用new的不同??

felton321 2009-03-15 10:41:03
我上网查阅资料,基本上是这样说的:
c++:new的对象都存储在堆上,包括如:int* p ; p = new int(39);
c#:对于值类型,new的对象在栈上;而对于引用类型,new的对象在堆上。
请教高手,是这样的么??
还有,在c++中,对于数组,如:char a[] = "hello world";网友说它是存在栈上的。而c#书上则指出数组是引用类型,是存在堆上的,栈上只存了它的引用而已,这是怎么回事啊,难道又是一种不同么??
小弟才申请的号,没有家底,请大家不吝赐教啊,拜托了~~~
...全文
706 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Rain208 2009-03-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 arong1234 的回复:]
C++
C#两种确实不具有可比性,C#的貌似都在堆上,而c++的new是可以重载的,因此一般在堆上,但是不确定,程序员可以改变这种情况。
[/Quote]
up
felton321 2009-03-16
  • 打赏
  • 举报
回复
谢谢大家啊!!
rgmlkthh 2009-03-16
  • 打赏
  • 举报
回复
本来就是两种语言,实现机制上面肯定有不同哦,应该没有可比性,只是分别搞清楚对应的实现机制罢了。
OenAuth.Core 2009-03-16
  • 打赏
  • 举报
回复
我上网查阅资料,基本上是这样说的:
c++:new的对象都存储在堆上,包括如:int* p ; p = new int(39);
c#:对于值类型,new的对象在栈上;而对于引用类型,new的对象在堆上。
请教高手,是这样的么??

是,c#把所有的自定类型,如类、结构体、数组等都当作引用类型(就是C++中的引用,这也是我觉得C#中最恶心的地方,引用也就引了,还来个ref关键字,死~~~~),当对他们使用new时自动在堆上分配(因为它们通常比基础类型要大),对于一般的int float等用new时自动在栈上分配,因为它们比较小,要的是效率。

还有,在c++中,对于数组,如:char a[] = "hello world";网友说它是存在栈上的。而c#书上则指出数组是引用类型,是存在堆上的,栈上只存了它的引用而已,这是怎么回事啊,难道又是一种不同么??

楼上的说了,数组的话就是栈,指针的话就是堆。这个我的空间里面有详细说明http://hi.baidu.com/anglecloudy/blog/item/c2b27045c5721020cefca33d.html。
至于c#书上则指出数组是引用类型,是存在堆上的?请看我的第一个回答

小弟才申请的号,没有家底,请大家不吝赐教啊,拜托了~~~
OenAuth.Core 2009-03-16
  • 打赏
  • 举报
回复
我上网查阅资料,基本上是这样说的:
c++:new的对象都存储在堆上,包括如:int* p ; p = new int(39);
c#:对于值类型,new的对象在栈上;而对于引用类型,new的对象在堆上。
请教高手,是这样的么??

是,c#把所有的自定类型,如类、结构体、数组等都当作引用类型(就是C++中的引用,这也是我觉得C#中最恶心的地方,引用也就引了,还来个ref关键字,死~~~~),当对他们使用new时自动在堆上分配(因为它们通常比基础类型要大),对于一般的int float等用new时自动在栈上分配,因为它们比较小,要的是效率。

还有,在c++中,对于数组,如:char a[] = "hello world";网友说它是存在栈上的。而c#书上则指出数组是引用类型,是存在堆上的,栈上只存了它的引用而已,这是怎么回事啊,难道又是一种不同么??

楼上的说了,数组的话就是栈,指针的话就是堆。这个我的空间里面有详细说明http://hi.baidu.com/anglecloudy/blog/item/c2b27045c5721020cefca33d.html
请看我的第一个回答
小弟才申请的号,没有家底,请大家不吝赐教啊,拜托了~~~
ForestDB 2009-03-16
  • 打赏
  • 举报
回复
两者的对象模型不太一样吧,C#中的东西不都是在托管环境中么,已经没有C++这么原始的堆/栈的含义了吧。
konhon 2009-03-16
  • 打赏
  • 举报
回复
C++陳述是對的.
C#不懂
MS_Frank 2009-03-16
  • 打赏
  • 举报
回复
前面的问题你说的是对的。

char a[] = "hello world";
是存储在栈上的。
char *a = new char[29];
是存储在堆上的。
cnStreamlet 2009-03-15
  • 打赏
  • 举报
回复
lz,貌似你陈述的都是对的

两个 new 虽然都长成 new 这个样子,但具体的机理还是看编译器的
arong1234 2009-03-15
  • 打赏
  • 举报
回复
C++
C#两种确实不具有可比性,C#的貌似都在堆上,而c++的new是可以重载的,因此一般在堆上,但是不确定,程序员可以改变这种情况。

65,170

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧