.net new一个类为什么报空指针_一个C++老鸟眼中的 C++ VS Java

用C++开发程序多年,用java写则较少。

C++和java都是很棒的语言,套用一句李连杰的话就是: 语言本身没有优劣之分,但程序员有强弱之别。

1、在内存管理方面 在这方面我更欣赏java,也认为这是java比C++更易用的重要原因。C++的用户自己管理 内存和灵活的指针用法往往让用户为了一个内存问题而调试好几天。让用户自己释放内 存使得用户必须非常小心,在程序有多个出口或指针被多个线程或被多个容器拥有的情 况下,何时能安全的释放内存都必须非常谨慎的,而且还要保证在程序的各个出口都保 证不内存泄露,这简直就是噩梦!智能指针能解决一些问题,但他带来的问题同样很多 。java的自动垃圾收集简直就是一大解脱!

2、在多线程编程方面 多线程编程大大增加错误的随机性和破坏了接口的"抽象",要在C++中设计好一个多线 程程序往往不是件轻松的事情。所以我更欣赏linux/unix下以多进程为主的编程手法。 java用"同步方法"来解决同步问题使得多线程异常简单(相对于C++),但在多线程方 面我更喜欢C++,因为java的方法虽然简单,但太过小儿科了,带来了两大弊端: 1)java采用了锁住整个对象的粗粒度多线程同步控制,而C++可以用更细粒度进行控制 。java采用的方法是这样的:类A,类中有成员变量m1、m2,为了保护成员变量,将类A 中所有访问这两个成员变量的成员函数设为synchronized,当某个线程T1调用了类A对象 (记为obj)的synchronized方法时线程T1将锁住整个对象obj,此时若另外一个线程T2 调用obj的synchronized方法(不一定和T1调用的那个方法是同一个方法)将阻塞(若T 2调用了obj的非synchronized方法不会被阻塞),直到T1调用完synchronized方法为止 。这种锁住整个对象的做法显然简化了实现,控制不够精细。例如,若T1调用了obj的一 个只访问m1不访问m2的方法,由于T1锁住了整个对象obj,导致了T2若调用obj的只访问 m2而不访问m1的方法也会阻塞,这显然不合理的。而且能造成重大的性能损失。 2)java采用锁住对象的方法来实现同步在很多情况下也不合理。因为要同步的资源往往 不是类的私有成员。如我们要同步的资源是某个文件A,在C++情况下,给A配把"锁"即 可,而java会锁住访问文件A的对象,这就要求所有线程都只能创建一个对象供所有线程 共享使用,否则不同的对象就可以同时访问文件A了,同步防护失去了意义。这就带来很 大的不便,需要程序员自己注意不要在别的线程中也new出一个对象来。

3、在网络编程方面 在这方面我更喜欢java,java不愧是靠网络起家,网络编程在java下特别简单。而用C+ +来写网络程序实在是太麻烦了。 在 Visual Studio 2010 编写 C 程序 http://www.nowamagic.net/cpp/cpp_WirteCInVS2010.php

打开VS2010 -> File -> New -> Project -> New Project -> Visual C++ -> Win32 -> Win32 Console Application. 输入工程名 -> 单击OK -> Next -> Finish,然后你会看到这样一个文件。

view source print?

01 // HelloNowaMagic.cpp : Defines the entry point for the console application.

02 //

fd6db265017deff8eaf509883a568582.png

03 04 #include "stdafx.h" 05 06 07 int _tmain(int argc, _TCHAR* argv[]) 08 { 09 return 0; 10 } 把它改成: view source print? 1 #include "stdafx.h" 2 #include 3 int _tmain(int argc, _TCHAR* argv[])

4 、{ 5 int a; 6 printf("Hello NowaMagic!"); 7 scanf("%d", &a); 8 return 0; 9 } 运行程序: 右击项目名 -> Property -> C/C++ -> Advanced -> Compile As,选择Compile as C Code(/TC),就可以了,所有的代码就会按照C标准去编译。 到此,我们就可以使用 Visual Studio 来编写 C 程序了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值