C 的“简单粗暴”让人上瘾,C 的内存管理就是“手动挡”:malloc 分配,free 释放,规则简单到不能再简单。你用得好,内存就在你手里攥得死死的;用不好,漏个洞也是你自己的锅。这种“所见即所得”的直白,就是有种原始的吸引力。
吹 C,往往是因为这种完全掌控的感觉,而不是 C 的内存管理有多“先进”。相比之下,C++ 的 RAII、智能指针这些机制虽然优雅,但规则复杂,用不好就容易翻车,显得“不纯粹”。
从 Unix 到嵌入式,多少经典系统都是它撑起来的。很多老手早年啃着 C 长大,很多新手也是从C开始步入编程的,对它就是有情怀。吹 C 的时候,他们可能不是在吹内存管理,而是吹那种“拓荒时代”的硬核感。C++ 呢?虽然继承了 C 的衣钵,但加了一堆新玩意儿,老派看不上,觉得它花里胡哨。
C++ 的“复杂性”容易被误解,这个你说得对,RAII 是 C++ 的杀手锏,天下苦 C 手动挡久矣,RAII 一出,谁不精神?但问题是,RAII 不是银弹。所有权清晰时,它确实无敌;所有权一乱,智能指针、引用计数就得上场;再复杂点,遇到动态环,GC 都救不了。C++ 的内存管理工具箱虽然丰富,但用起来需要脑子。很多人没搞懂用法,或者踩了坑,就觉得 C++“内存管理不行”,转头吹 C 的“简单可靠”。
在一些高性能场景,比如游戏引擎、嵌入式系统,手动挡的 C 能让程序员精确地捏住每一块内存,榨干性能。C++ 虽然也有这能力,但 RAII、智能指针这些抽象层多少会引入开销。那些喷 C++ 的人,可能觉得这些“现代化”特性是累赘,不如 C 那样“裸奔”来得痛快。而且技术社区的言论从来不缺偏见。吹 C 的人,往往放大它的优点(简单、可控),忽略它的痛点(繁琐、易出错);喷 C++ 的人,则盯着它的复杂性猛踩,却忘了它在资源管理上的进步。这种双标,其实是个人偏好和圈子文化在作祟。
C++ 内存管理真不如 C?
这你说得太对了,论内存管理,C++ 吊打 C 手动挡。C++ 的 RAII 解决了资源泄漏的痼疾,智能指针把所有权管理得明明白白,哪怕遇到复杂场景,引用计数也能兜底。C 呢?全靠手写 free,一个不小心就是内存泄漏或野指针,调试起来能把人逼疯。那些喷 C++ 内存管理的人,要么没用好 RAII,要么压根没理解它的价值。说 C++ 因为内存管理“败局已定”,简直是胡扯——如果内存管理是原罪,C 早该被扫进垃圾堆了。
你提到 C++“败局已定”,但原因不是内存管理,而是学习成本高和人才断层,这点我完全认同。
C++ 并不是一门“上手即用”的语言。RAII、模板、虚函数、异常、多线程……随便一个特性都能写本书。
想精通它,得花几年时间磨炼。可现在开发节奏这么快,谁有空慢慢啃?现在AI编程大行其道,新手更愿意学面向AI编程,Python更是火的没边儿,一周就能出活儿,几天写出APP的教程层出不穷,C++ 自然被冷落。
人才断层这才是恶性循环的开始,你说得太到位了:大环境劝退,合格工人少,岗位萎缩,回报率低。新一代不学 C++,老一代又逐渐退休,人才池子越来越浅。公司一看招不到人,新项目就不敢用 C++,岗位少了,谁还愿意花时间学?恶性循环就这么来了。相比之下,C 虽然也难,但它简单,生态成熟,嵌入式领域还撑着,所以“不会被淘汰”的声音还能喊得响。
市场配置资源追求利润最大化,不是生产力最优。C++ 学习成本高,短期回报低,资本懒得捧。像 robotics 这种工科方向,研究 SLAM 算法多赚眼球,扣 C++ 语言规范谁看啊?但这不是 C++ 的错,是市场的无能。C++ 在游戏、金融、高性能计算这些领域依然是王者,说明它的价值没丢,只是被潮流埋没了。