• C/C++三大定律


    三法则(英语: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.
    根据我的理解,用到自己写析构的话一般得释放自己分配的空间,而涉及到自己分配空间的话,其成员变量就有指针等类型,这样的话就得自己写赋值操作符和复制构造函数了
  • 相关阅读:
    Maven依赖
    Maven坐标
    初识Maven POM
    Maven配置
    相似文本文档分析之SimHash算法
    Ubuntu14.10下JDK编译安装详细操作说明
    Ubuntu14.10下Tomcat编译安装 详细操作说明
    ubuntu 14.10 编译安装 Ruby
    ubuntu 14.10 编译安装 Python
    ubuntu 14.10 编译安装 Golang
  • 原文地址:https://www.cnblogs.com/jameszhan/p/3039604.html
Copyright © 2020-2023  润新知