Re: [問題] 跨 DLL 的問題
※ 引述《legnaleurc (CA)》之銘言:
: 剛剛重新翻了一下 C++ Coding Standard
: 裡面有一條是說,在模組邊界如果使用std::string
: 等class的話,會導致跟它接的模組也要用同一個實作品
: 用相同選項編譯,因此若為了可攜性要盡量使用低階型別
首先,C++ 沒有規定 name mangling 的方法
(即 function/variable name 對應到 object file symbol 的方式)
也沒有規定物件中的 virtual table 應該要怎麼擺
所以如果你的程式去連結不同 compiler 生出來的 library
輕則 linking error 重則 runtime error
通常不會有好下場
因此一但你選擇 C++ 開發程式
則它用到的 library 都必需用同樣的 compiler 來編
如此也可以保證這些 library 都使用同樣的 std::string 實作品
: 但是它又鼓勵使用如std::tr1::shared_ptr的資源管理物件
: 來傳遞給其他DLL,這不就代表客戶也必須要使用同一份實作?
是的 這世界並不美好
: 是否這是在"可攜性"和"正確刪除物件"之間的取捨?
如果你需要跨 compiler 的可攜性
光是「盡量使用低階型別」還不夠
事實上不要用 C++ 才能達到跨 compiler 的可攜性
(而且如 zxvc 所說,即使用 C 還是很容易踩到地雷)
大部份的情況我還是會用 C++ 啦
我寧可花時間重編 library 也不要花時間 debug
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.121.113.79
※ 編輯: littleshan 來自: 59.121.113.79 (04/02 23:45)
→
04/02 23:47, , 1F
04/02 23:47, 1F
推
04/03 00:30, , 2F
04/03 00:30, 2F
→
04/03 00:30, , 3F
04/03 00:30, 3F
討論串 (同標題文章)