我目前正在建立在砂基礎上的代碼庫。是否有任何靜態分析工具檢查規則3(或5規則的C + + 11)
在所謂的測試庫中有很多類違反了「3規則」。大多數聲明一個非平凡的析構函數,但缺少一個拷貝構造函數或賦值運算符。
是否有任何編譯器標誌(gcc)或靜態分析工具在類違反3的規則時發出警告?
目前我們使用Coverity和GCC版本4.4。
我目前正在建立在砂基礎上的代碼庫。是否有任何靜態分析工具檢查規則3(或5規則的C + + 11)
在所謂的測試庫中有很多類違反了「3規則」。大多數聲明一個非平凡的析構函數,但缺少一個拷貝構造函數或賦值運算符。
是否有任何編譯器標誌(gcc)或靜態分析工具在類違反3的規則時發出警告?
目前我們使用Coverity和GCC版本4.4。
Coverity has。我們使用6.5版本。有一個檢查器MISSING_COPY_OR_ASSIGN。
此規則默認情況下未啓用Coverity(可能被認爲是誤報)。我們現在啓用了它並突出了一些問題。 – mark 2013-05-24 07:36:35
@mark請檢查--rule選項。它啓用所有這些:ASSIGN_NOT_RETURNING_STAR_THIS,COPY_WITHOUT_ASSIGN,MISSING_COPY_OR_ASSIGN,SELF_ASSIGN。 Coverity有一個不錯的docs @ server:8080/docs/en/index.html。端口可以不同,直到配置。 – jackua 2013-05-24 17:03:54
@mark默認設置非常保守。我在150個跳棋中跑出了130個,每天晚上我都會在單個構建中找到所有部門的資源。非常平行的構建只需要4個小時。我將所有缺陷分爲4個級別,分別對待它們。我可以分享我的分類。 – jackua 2013-05-24 17:57:33
來自Parasoft(商業工具)的C++測試有一個規則(MRM-40),涵蓋了「複製和銷燬一致」,看起來會對您有所幫助。基本上它說如果你定義了任何拷貝構造函數,拷貝賦值操作符或析構函數,你可能需要定義其中一個或兩個。
或[Rule of Zero](http://flamingdangerzone.com/cxx11/2012/08/15/rule-of-zero.html)。 – 2013-05-07 15:58:53
你能更具體嗎?也許一個例子可以幫助... – perror 2013-05-07 16:01:30
@Andrey Cpp - 發送示例 – mark 2013-05-07 16:36:57