热门问题
时间线
聊天
视角

三法则

C++程式設計 来自维基百科,自由的百科全书

Remove ads

三法则(英语:Rule of Three)以及五法则C++里,它是一个以设计的基本原则而制定的定律。

规则

它的要求是,假如有明显定义英语Declaration (computer programming)下列其中一个成员函式,那么程序员必须写入其他两个成员函式到类别内,也就是说下列三个成员函式缺一不可[注 1] [1]

上述三个函式是特别的成员函式英语Special member functions,假如程式设计师没有自行定义或宣告这三个函式,编译器会自动地建立他们并且编译到应用程式内。然而,如果程式设计师仅定义其中一个,其馀两个函式仍然会由编译器自动产生,这种混杂的情况非常容易产生程式设计师难以预期的错误。三法则的存在,正是提醒程式设计师避免那样的陷阱。 三法则这个专有名词是由马歇尔·克来恩于1991年创立[注 2][2]

它的修正版本是,假如类别有用到RAII,可以不必定义解构子,也就是所谓的二大定律[注 3][3]。 因为隐性产生的建构子与设定运算子可以很容易地复制类别内所有的资料成员[4],当资料成员是指标型态时,指标位址会随著类别而跟著被复制[注 4]。要注意的是,直接地复制指标位址是一项非常危险的动作,所以只要类别有封装指标型态的资料结构,或是类别有封装外部参照的资料成员,例如指标型态的资料成员,程式设计师应该为此而定义显性的复制建构子与设定运算子[注 5]

Remove ads

五法则

C++11新增两个法则,称为五法则[注 6]

  • 解构子
  • 复制建构子
  • 设定运算子
  • 移动建构子[注 7]
  • 移动复制运算符[注 8]

范例

更多信息 头文件 header.h, 主函式 main.cpp ...
Remove ads

注释

参考资料

相关条目

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads