c++ big three 是什么?..

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/15 18:18:07
c++ big three 是什么?..
xV[SV+z i_a 3L-U3fIlKJl \n[! 3ڣ'BE\2}t߷\d&$ė$JPaffMt%FTrXunJPp1, ?ޱ#/݌k.Opp *L7cmaӠiwB-+%ɆvbY]] XT΀rP8xDV` zN# d UCK KCD)fRd/ZkH ϏNVkDM0*z枃1E(dq;4uQ! <yv,{3f45jGWpy %fp7 `vͳ[{_,X Bq!>mi'̃0:ICC-UMS'T̜mb`r1:%y\Mi*F`;v0DJxM\KfL&f̚,=ȦDWzn6<C?6KI s#@t\8-z憆VdIe4/hl /$`' O={*y1OӘ V61ξ*8-( a6׉^`/dtiȔE)^%ϕ@,CBLX/N;Gָ"7"S CV`DiȲ3w%.=Cӭj\& @<%)Ě[WFTמ2ܽDTKRc\A]>"{-u{*Τ 4D^%ۗx ;ɪ͆.>Ny(6Yϳ@Y C7/ߤVkh5iX;Xu]|Y5t?Mέљd5moq[;xC55S/{V/!J:NT&/xŕ:Î3jo%a>\]ƣ 7د_7D("!@Ww5sX R86J["*K.UE5qM96_Ry6-4;*fZ @Z`\7+^)fQn־3Y0l, ͳ0[

c++ big three 是什么?..
c++ big three 是什么?
..

c++ big three 是什么?..
三法则(英语:rule of three,the Law of The Big Three,The Big Three;三法则,三大定律)在 C++ 程序设计里,它是一个以设计的基本原则而制定的定律,三法则的要求在于,假如类有明显地定义下列其中一个成员函数,那么程序员必须连其他二个成员函数也一同编写至类内,亦即下列三个成员函数缺一不可.:
析构函数(Destructor)
复制构造函数(copy constructor)
复制赋值运算符(copy assignment operator)
上述三个函数是特别的成员函数,假如程序员没有自行定义或是编写声明它们,那么编译器会自动地创建它们,并且会编译至应用程序内.相反地,假如程序员有定义上述三者其中一个函数,那么由编译器自动产生出来的上述三个函数是不会搭配到这个类内.三法则(Rule of three)这个专有名词是由 Marshall Cline 于 1991 年创立的.
这个法则的修正版本是,假如析构函数有用到 RAII(资源的取得就是初始化,Resource Acquisition Is Initialization),可以使得析构函数的定义更加明确(也就是所谓的二大定律,The Law of The Big Two[3]).
因为隐性产生(英语:implicitly-generated;由编译器自动产生)的构造函数与赋值运算符可以很容易地复制类内所有的数据成员[4],当数据成员是指针型态时,指针地址会随着类而跟着被复制,要注意的是,直接地复制指针地址是一项非常危险的动作,所以只要类有封装指针型态的数据结构,或是类有封装外部引用的数据成员(例如:指针型态的数据成员),程序员应该为此定义显性的(英语:explicit;由程序员来编写清楚明确的)复制构造函数,以及复制赋值运算符.
PS.
根据我的理解,用到自己写析构的话一般得释放自己分配的空间,而涉及到自己分配空间的话,其成员变量就有指针等类型,这样的话就得自己写赋值操作符和复制构造函数了