11
最佳实践:五法则与零法则
Rule of Five / Zero
写管理资源的类,有几个特殊函数(析构、拷贝构造、拷贝赋值、移动构造、移动赋值)。要么全写,要么全不写——这就是著名的"五法则"。而现代 C++ 的更高境界是零法则。
则五法则 vs 零法则
五法则(Rule of Five):如果你需要自己写析构函数(说明你在手动管资源),那拷贝构造、拷贝赋值、移动构造、移动赋值这五个函数你最好都写,行为才一致。
零法则(Rule of Zero):如果你用智能指针、std::string、vector 这些"自带 RAII"的成员,你一个特殊函数都不用写,编译器生成的就完美。这才是现代 C++ 追求的——把资源管理交给标准库,你只管业务逻辑。
三条现代 C++ 军规
① 能用 STL(vector/string)就别自己 new 数组。
② 用 make_unique / make_shared,别裸 new。
③ 大对象传参用 const&,别传值(避免拷贝)。
照着 Google C++ Style Guide 和 C++ Core Guidelines 写,能避开绝大多数坑。