赞同那个Linus,孟岩,云风的关于 C vs C++ 的观点(原来发布在校内网的文章回复里)

本文探讨了C++在使用过程中遇到的内存管理问题,特别是针对多线程环境下操作符重载的挑战。作者通过举例说明了C++中封装OpenCV库时遇到的困难,指出C的简洁在某些场景下更为实用。同时,提到了C++的一些优点,如枚举封装、RAII资源管理以及STL的部分应用。
摘要由CSDN通过智能技术生成

 

孟岩和云风的话说得更加中肯,用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 定律,并发被你毁了。说了半

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值