為什麼詬病 C++ 記憶體管理的人卻喜歡尬吹 C ?
更新于:2025-04-06 12:00:22

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++ 在遊戲、金融、高性能計算這些領域依然是王者,說明它的價值沒丟,只是被潮流埋沒了。