毋庸置疑,所有的程序员都不会不同意这样的观点:编写程序是一种逻辑非常严谨的工作。我作为一名老C/C++程序员,早就已经养成了分配和释放内存一定要成对出现的习惯,比如:void demo_func (void){ new xxxxClass; xxxVar = malloc(size); ..... free(xxxVar); delete xxxxClass ;}近期在阅读一名C#程序员编写的C代码时,简直可用惨不忍睹来形容,一段程序中需要使用一个变量,每次使用,都用Create创建对象的方法,但是根本没有释放,美其名曰说:习惯了,C#有垃圾回收器帮你做事。如果垃圾回收器被这样来使用的话,那么真是无语了。我想,C#和JAVA的垃圾回收器设计的理念应该不是为了让程序员这样来使用吧,而是为了使得内存的使用更有效率,为了弥补程序员在编写程序时没有显式释放内存的缺陷而设计的吧,但并不代表你就不需要显式地释放内存。很多JAVA程序员编写的程序运行一段时间后就会越来越慢,是否就是这个原因呢,不得而知。在此,我作为一名C/C++程序员,给所有的C#和JAVA程序员一个忠告,那就是尽可能不要依赖垃圾回收器来为你工作,而要相信自己,养成良好的逻辑思维习惯和编程习惯,这样,你的代码才能做到稳定、可靠、高效地运行,你自己的逻辑思维能力和逻辑判断能力也才能不断地提高。否则,你不可能成长为一名合格的,逻辑严密的,真正的程序员。从另一个角度来看,C#和JAVA的垃圾回收器真的不是一个好东西,它的存在,破坏了程序的严谨性,有可能毁掉了没有学习过C语言的年轻一代的C#和JAVA程序员。当然,程序语言本身没有错误,如何使用关键还看程序员自己,年轻的一代程序员,垃圾回收器,还是忘记这个工具的存在吧,你会变得越来越严谨。
//C#上的
TestClass tc = new TestClass();//创建新实例
不依靠GC,怎么把它释放掉?
还是要GC来判断,GC就是干这个的
也不能说C#的编码习惯应该带到C/C++里去。
这是新时期外国人给中国人的牙片,让你舒服,让你无知,让你思维退化。(微软的粉丝会骂我了。。没有关系,中国的大多数程序员素质本来就低)
看看国外的大牛多么的谦虚,多么的热心。而在中国,别人的热心会带来攻击!!!
11 楼是老鸟,一针见血的从技术进行反驳。楼主的问题源于“阅读一名C#程序员编写的C代码”,如果楼主读到的是C程序员写的C#代码,会有什么感想?
说句题外话,申请和构造对我们是有意义的,因为要使用对象要使用指针,而释放和析构其实对我们编写程序没有意义,一个东西对我来说没有用了,常理来说我是不会在意该何时何地或该由谁来扔掉它。
一个真正的程序员,即使是用c#,他也会意识到虽然一个对象即使不是我亲自扔掉的,但肯定有人会帮我扔掉,它没用了是应该被扔掉的。不能否认c#确实隐藏了太多东西,也造就了一大批概念混乱的所谓程序员,但这不是c#的错,也不是托管代码的错,还是在人。
我们不能因为有汇编,就不用c++了吧。
想起了linux之父的那场争辩,呵呵。作为一个c++程序员,谨慎的支持一下c#。
(lz以为做c++的很牛逼,看不起做c#和做java的)也不知道lz写没写过c#代码?
photoshop和paint.net差别很大吗?至少我不觉得有多大区别
C++的机制跟C#不一样,不要一概而论,垃圾回收是它的特点,你教我释放一下?
只能说你让一个不了解C++的人在你熟悉的领域工作,你看得不爽而已
仅此而已
你要用C#写点东西试试?
记住,C++永远也不可能在开发速度上超过托管机制的Java和C#,现在的硬件资源过剩,快速的开发出适应需求的东西才是重要的,C++和C#携手发挥自己的优势去开发才是王道。
本人做过3年C++,项目经理,现在多数采用C#以及Java进行敏捷开发,欢迎切磋。
如果能手动立即释放某个类的内存,在.NET/C#里面反而会出大问题,比如某个方法里面的代码如下
A a=new A();
....
Func<int> f = () => a.GetInt();
return f;
如果有人在这个方法里面把 a 给释放了肯定就会悲剧。
养成良好习惯是必须的,这个提醒可能并没有深入对c#的了解,出发点是好的。
C/C++确实也有一些好的地方,欢迎楼主继续把好的与我们分享!
LS许多人至少有一点没有搞清楚,这位LZ是提醒c#程序员今后编写c程序时如何如何。编写c程序当然要懂c,就好象编写c#程序也要首先懂.net。然而,LZ话锋一转,变成批评java跟.net了,那么这个文章的逻辑就前后不搭调了。
我在C#中基本上不用管内存的事,只管考虑自己的业务逻辑就行了,在C/C++中对内存的申请和释放注意下就行了,也没那么恐怖,很多人把C/C++的指针/手动内存管理说的多么可怕,其实不然,都是自己吓自己,说到底是C/C++没学好而已
Java都是被这样的程序员埋汰了,你们并没有领会楼主大哥的文章... ...
你玩你的,只要你自我感觉良好.
如果能用C#完成的工作,建议还是转过来玩C#吧。
所以,个人认为也没有什么可以相比的东西,更没有可以套用的东西;
如果有开发IDE的微软早就说明了;再说,C#本身就是为了加速开发周期的,如何还和C++一样,对代码处理的细致性,那么它就不能加速软件的开发周期了;它也可能不会如此受人青睐;;;\个人理解 ,,,