그냥 개인적으로 생각하던 거 올릴 곳도 없고 해서 올려봅니다.
내용이 반말이라 죄송합니다. 좀 강하게 딱 필요한것만 적은거라서요.
제가 생각하기엔 이정도만 지켜도 현대적인 언어 못지않게 개발이 가능하고 또 메모리릭 같은것에서
벗어날 겁니다.
- C++17이상을 지원하는 컴파일러만 사용하자.
- pointer를 사용하지 말자.
2.1. 메모리 할당이 필요한곳에는 std::shared_ptr, std::unique_ptr을 사용하자.
2.2. pointer는 인자 또는 legacy api에만 사용하자. - 변수에 타입을 나타내는 접두사를 붙이지 말자.
- 천저리기나 맥크로 사용을 최소화 하자.
4.1. 함수형태의 전처리기 사용금지. inline으로 충분하다.
4.2. 전처리기 상수를 만들지 말자. constexpr, static등으로 충분하다.
4.3. 컴파일 분기를 위한 전처리기만 사용하자. - STL을 적극 활용하자. 어지간한건 STL에 전부 있다.
- lambda를 적극 활용하자.
- thread가 필요하면 STL를 찾아라. 종류별로 있다.
- 전역 변수를 만들지 말자.
8.1. 프로그램 설정등을 저장할 곳이 필요하면 singleton 패턴을 사용하는 클래스를 하나 만들어라. - 형변환이 필요한곳에 (char)같은 C스타일 캐스팅을 사용하지 말자.
9.1. C++타입 캐스팅(static_cast, reinterpret_cast, dynamic_cast)을 사용하자.
9.2. stl 타입을 형변환할 경우 stl에도 cast가 있다. - template을 사용하자. 가급적 “<class T>” 형태로 사용하자. 남발금지
- enum class 를 사용하자.
- 함수에 noexcept, throw() 를 사용하자.
12.1. 작은 규모의 함수는 예외처리를 확실히 하고 noexcept를 사용하자. - try, catch를 사용하자.
- 인터페이스를 변수로 만들 경우 접두사i를 붙이자.
- class를 만들때는 한가지 용도로만 만들자. 여러가지 기능이 필요하면 기능별 class를 만들고 그 class들을 내부적으로 사용하거나 다중상속하는 class를 만들자.
- 미래에 사용할지도 모를 멤버 변수, 멤버 함수는 만들지 말자.
부록
- std::shared_ptr, std::weak_ptr 사용법을 통달하자.
- std::function과 std::bind 사용법을 통달하자.
- lambda 사용법을 통달하자.
- std::thread, std::promise, std::future, std::packaged_task, std::async 사용법을 통달하자.
- std::atomic 사용법을 통달하자.