作者:
Ommm5566 (56天團)
2017-12-25 10:11:01※ 引述《tofuflower (無)》之銘言:
: 修正:經 Sirctal, chiaming0914, elements 指正,GC 這點是我錯誤論述。
: 下面用雙引號匡起來的內容就是被指正有問題的部分,請不要盡信。
: 保留爭議原文讓後續讀者知道這裡原先的爭論點是什麼。
: "但用 C++ 就要自己處理 GC 問題。而我認為自己刻的 GC 能比 JVM GC 優秀的工程師應
: 該是少數中的少數,因此把 GC 問題也列入考量再加上 JIT 技術的話, C++ 效能並不
: 一定總是能樂勝 Java,當然主要還是要看使用情境。"
Java因為有gc需要持續作檢查 效能已經輸一截
run-time效能取決於記憶體釋放時機
Java批次釋放絕對是輸compiler時期就決定釋放的c++
不過Java有一種情況可以有逼近C++的效能
就是customized garbage collector 也是靠人為去決定釋放時機
C++釋放不好有兩個原因
1. 模組沒切好 這個狀況就算是java的gc一樣難以判斷何時回收
2. 不會寫delete或free 你有三個選擇
第一是從此放棄需要delete/free的語言
第二是C++11以來就提供了smart pointer像是unique_ptr 和shared_ptr
第三個好好地學記憶體管理
multi-thread的部分
因為cpu運算速度早就飽和才有free lunch is over這句
所以近年平行演算法正夯 基本上語言現在都要提供不同等級的平行工具
smart pointer 已經簡化事情太多 只要搞清楚ownership幾乎不需要在操心管理
用smart pointer就不需要new delete了但我遇過的同事大部分都還是不太愛用習慣問題而已
我們幾乎已經強制用了 安全性高太多了 語意又非常明確尤其 unique ptr
所以我們幾乎都只用 unique ptr 很多多情境下 unique ptr+raw ptr就夠用
作者:
senjor (哞哞)
2017-12-25 12:22:00學C#的是不是也應該要學學ptr的相關知識比較好?
某些極端特例會需要自己管理資源,例如把smart ptr放到union內,只是應該不會沒事這樣弄
作者:
Clangpp (Clang++)
2017-12-25 16:54:00媽的 我聽朋友說他公司還有老rd嫌c++11太新咧
作者:
testPtt (測試)
2017-12-25 17:43:00我們幾乎都只用 auto ptr ^_^
作者:
kwpn (ITSST)
2017-12-25 21:35:00使用auto_ptr的缺點是 要了解它的潛在問題才不會用錯
deprecated的意思不是不支援,只是不宜使用,未來版本可能拿掉到17才拿掉