首先看一段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#不是有垃圾回收么,从语言级别解决了内存问题,可以减少很多不容易觉察的错误,当然很适合我这样的新手了。