4. 來自 Google 的奇技

2018-02-24 15:11 更新

Google 用了很多自己實(shí)現(xiàn)的技巧 / 工具使 C++ 代碼更加健壯, 我們使用 C++ 的方式可能和你在其它地方見到的有所不同.

4.1. 智能指針

Tip

如果確實(shí)需要使用智能指針的話, scoped_ptr 完全可以勝任. 你應(yīng)該只在非常特定的情況下使用 std::tr1::shared_ptr, 例如 STL 容器中的對象. 任何情況下都不要使用 auto_ptr.

“智能” 指針看上去是指針, 其實(shí)是附加了語義的對象. 以 scoped_ptr 為例, scoped_ptr 被銷毀時(shí), 它會刪除所指向的對象. shared_ptr 也是如此, 并且 shared_ptr 實(shí)現(xiàn)了引用計(jì)數(shù), 所以最后一個(gè) shared_ptr 對象析構(gòu)時(shí), 如果檢測到引用次數(shù)為 0,就會銷毀所指向的對象.

一般來說,我們傾向于設(shè)計(jì)對象隸屬明確的代碼, 最明確的對象隸屬是根本不使用指針, 直接將對象作為一個(gè)作用域或局部變量使用. 另一種極端做法是, 引用計(jì)數(shù)指針不屬于任何對象. 這種方法的問題是容易導(dǎo)致循環(huán)引用, 或者導(dǎo)致某個(gè)對象無法刪除的詭異狀態(tài), 而且在每一次拷貝或賦值時(shí)連原子操作都會很慢.

雖然不推薦使用引用計(jì)數(shù)指針, 但有些時(shí)候它們的確是最簡單有效的解決方案.

(YuleFox 注: 看來, Google 所謂的不同之處, 在于盡量避免使用智能指針 :D, 使用時(shí)也盡量局部化, 并且, 安全第一)

4.2. cpplint

Tip

使用 cpplint.py 檢查風(fēng)格錯(cuò)誤.

cpplint.py 是一個(gè)用來分析源文件, 能檢查出多種風(fēng)格錯(cuò)誤的工具. 它不并完美, 甚至還會漏報(bào)和誤報(bào), 但它仍然是一個(gè)非常有用的工具. 用行注釋 // NOLINT 可以忽略誤報(bào).

某些項(xiàng)目會指導(dǎo)你如何使用他們的項(xiàng)目工具運(yùn)行 cpplint.py. 如果你參與的項(xiàng)目沒有提供, 你可以單獨(dú)下載 cpplint.py .

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號