Robomongo Code Quality - TBladen/mango GitHub Wiki
C/C++
1. Code Checks/Actions Before Commit
Note: The following guidelines are extracted from various sources (see "References" for all list) mainly from "C++ Core Guidelines by Bjarne Stroustrup, Herb Sutter, July 28, 2016" based on Robomongo project's needs and code structure.
General
- Keep things private as much as possible. (member variables, functions etc..)
- Use "const" a lot. Try to refactor "non-const" to "const" where possible (variables, functions, anything possible..)
- Always try to initialize a variable with default value. (built-in type variables (i.e. int, int*) may/will have garbage values when un-initialized which might result with insidious bugs)
- Make sure member variables are all initialized (uninitialized variables may have undefined values)
Resource Management
- Use C++11 smart pointers (unique, shared, weak) instead of explicit(naked) new and delete.
- Avoid using explicit (naked, non-RAII) new and delete. (strong memory leak candidate)
- If "new & delete" must be used, wrap in ctor and dtor for automatic clean up (RAII).
- Keep using raw pointers (T*) for non-owning purposes.
- Do not use smart pointers(owning ptrs) for the purpose of raw(non-owning) pointers (T*).
Concurrency
- Share the copy of object across threads. Avoid passing pointer or reference to an object (local variable, class member.. any thread object) across different threads.
...
References
C++ Core Guidelines by Bjarne Stroustrup, Herb Sutter, July 28, 2016
Scott Meyer's guideline-based books on C++ (http://www.aristeia.com/)
- Effective Modern C++, Scott Meyers, 2014
- Effective C++, Third Edition, 2005
- Effective STL, 2001
- More Effective C++, 1996
C++ Coding Standards: 101 Rules, Guidelines, and Best Practices Nov 4, 2004
by Herb Sutter and Andrei Alexandrescu
...
2. Static Code Analysis Tools
Spell Checker
- We use spell checking for all text (user/programmer visible texts and comments).
- Following tool does a pretty good job to ensure this: Visual Studio Spell Checker
To-do:
- Add tool similar to "PC Lint" ...