鍍金池/ 教程/ C/ 來自 Google 的奇技
結(jié)束語(yǔ)
作用域
頭文件
來自 Google 的奇技
注釋
規(guī)則特例
命名約定
其他 C++ 特性
格式

來自 Google 的奇技

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

智能指針

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

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

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

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

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

cpplint

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

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

某些項(xiàng)目會(huì)指導(dǎo)你如何使用他們的項(xiàng)目工具運(yùn)行 cpplint.py. 如果你參與的項(xiàng)目沒有提供, 你可以單獨(dú)下載 cpplint.py <http://google-styleguide.googlecode.com/svn/trunk/cpplint/cpplint.py>_.

下一篇:規(guī)則特例