孟岩和云风的话说得更加中肯,用C++有比较重的思想包袱,这个我有体会,一点也不假。比如我用OpenCV库(Intel的,做人脸识别的),做了一个C++ Wrapper,其结果是,我80%的时间都花在了如何管理内存的上。比如 operator * 运算符,你得返回一个包含运算结果的矩阵,但是这个矩阵应该存放在哪?1. 栈。坏主意,当 operator * 返回时,你存储的东西已经指向了不可靠的地方。我做过实验,如果在 operator * 中加入一个printf(),可以正常返回,否则不可以。这个是很垃圾的想法。 2. 堆。这个是用C++ operator new 的朋友们的第一想法。但是我问你,谁来释放这块空间? operator * 已经返回,所以它肯定管不了。调用者?那更加不可靠,比如你用A * B,而不是C = A * B,那么内存不就泄漏了。当然你说前一种没有意义,对,但是如果是连乘呢,如A * B * C * D,你还那么自信吗因为后一个 operator * 的输入其实是一块堆中的值,那么 operator * 还要管理内存,你放心? 3. 静态存储区。这个想法好,我很喜欢,可以解决上面所有的问题,但是,你想过没,多线程时,你是不是还要给这个 static 上锁?呵呵, operator * 本来就是可以直接并发的,结果你现在限制了并发能力,根据 Adam 定律,并发被你毁了。说了半