对象的构造与析构(二) 对象的构造与析构(二)

对象的构造与析构(二)

 

1. 析构函数

  • C++的类中可以定义一个特殊的清理函数,叫做析构函数,语法规则为~ClassName()
  • 析构函数没有参数,也没有返回值类型声明
  • 析构函数在对象销毁时自动被调用
  • 当类中自定义了构造函数,并且构造函数中使用了系统资源(如:堆空间、文件打开,等),则需要自定义析构函数

2. 对象的构造与析构顺序

多个对象之间

多个对象构造时:

  • 栈对象的构造顺序依赖于程序的执行流
  • 堆对象的构造顺序依赖于new的使用顺序
  • 全局对象的构造顺序是不确定的,不同的编译器可能使用不同的规则

多个对象析构时:

  • 栈对象和全局对象的析构顺序与构造顺序相反
  • 堆对象的析构发生取决于delete的使用顺序

单个对象内部

单个对象创建时,对象内部构造函数的调用顺序为:

  • 先调用父类的构造函数
  • 再调用成员变量的构造函数,调用顺序与声明顺序相同
  • 最后调用类自身的构造函数

单个对象内部的析构顺序与构造顺序相反。

3. const对象与const成员函数

const对象

  • 由const关键字修饰的对象为只读对象
  • 只读对象的成员变量不允许被改变
  • 只读属性只在编译阶段有效,运行时无效

1. 析构函数

  • C++的类中可以定义一个特殊的清理函数,叫做析构函数,语法规则为~ClassName()
  • 析构函数没有参数,也没有返回值类型声明
  • 析构函数在对象销毁时自动被调用
  • 当类中自定义了构造函数,并且构造函数中使用了系统资源(如:堆空间、文件打开,等),则需要自定义析构函数

2. 对象的构造与析构顺序

多个对象之间

多个对象构造时:

  • 栈对象的构造顺序依赖于程序的执行流
  • 堆对象的构造顺序依赖于new的使用顺序
  • 全局对象的构造顺序是不确定的,不同的编译器可能使用不同的规则

多个对象析构时:

  • 栈对象和全局对象的析构顺序与构造顺序相反
  • 堆对象的析构发生取决于delete的使用顺序

单个对象内部

单个对象创建时,对象内部构造函数的调用顺序为:

  • 先调用父类的构造函数
  • 再调用成员变量的构造函数,调用顺序与声明顺序相同
  • 最后调用类自身的构造函数

单个对象内部的析构顺序与构造顺序相反。

扫描二维码关注公众号,回复: 7461378 查看本文章

3. const对象与const成员函数

const对象

  • 由const关键字修饰的对象为只读对象
  • 只读对象的成员变量不允许被改变
  • 只读属性只在编译阶段有效,运行时无效

猜你喜欢

转载自www.cnblogs.com/dsgdsg722/p/11669351.html
今日推荐