C#与C++ 变量定义的区别

首先看一段C++代码

是可以正常执行输出5的。

 

然后看C#代码

这段代码是无法编译的。

 

C#所有的变量,都是通过new 操作符在堆上创建的

 

例如定义一个int a;C#那么只是定义了一个int型的引用

                          C++则是在程序编译时就创建了一个int型数据,里面存储的数据是随机的

 

如果写成 int a =5 C#编译器会翻译成int a = new int(5);

                           C++则依然是在程序编译时就创建了一个int型数据,只是此时数据确定而已

 

对于class,也是相同的,故从C++过渡到C#时,要小心这个问题

 

同时C++的这种模式,容易造成内存错误,例如曾经遇到过一个问题

 

看如下代码:

 

 

这段代码执行时候同样会报错,这因为C++运行时库在程序退出时会清理程序内存里的变量,而恰好他清理的这个对象已经被我们显示的Delete掉了,所以就会报错;编程时候如果不小心把这种类型的变量引用传到了其他类里,如果那个类执行了析构,就会产生这个错误。

所以我想这就是为什么C#里所有变量都用new操作符产生的一个原因,因为C++里也一样,New出来的变量是不会被运行时库清理的,只有到退出程序后,由WINDOWS来释放.

 

虽然这样容易造成内存泄漏,可是我们的C#不是有垃圾回收么,从语言级别解决了内存问题,可以减少很多不容易觉察的错误,当然很适合我这样的新手了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值