C++ 中对象的创建和析构是一个关键概念,它决定了程序中内存的管理方式。下面将详细阐述 C++ 对象生命周期的各个阶段,涵盖从创建到析构的各个方面。
对象的创建
内存分配
当创建对象时,首先需要为其分配内存。C++ 使用 new 运算符在堆上动态分配内存。new 返回一个指向分配内存地址的指针。
构造函数调用
内存分配后,将调用对象的构造函数。构造函数初始化对象的成员并执行任何必要的设置操作。
指针赋值
new 返回的指针通常被赋值给一个局部变量或成员变量,以引用创建的对象。
对象的属性
生命周期
对象的生命周期从创建开始,持续到析构。生命周期由作用域决定,即对象可见的代码范围。
作用域
对象的范围由 {} 块决定。当离开块时,超出范围的对象将被销毁。
存储持续时间
对象存储在堆或栈上。堆上对象的生命周期独立于作用域,而栈上对象的生命周期与作用域相同。
对象的销毁
析构函数调用
当对象超出其作用域时,它将调用其析构函数。析构函数释放对象持有的资源并执行任何必要的清理操作。
内存释放
析构函数完成后,堆上分配的内存将使用 delete 运算符释放。
指针失效
指向已析构对象的指针将变为无效。访问无效指针会导致未定义行为。
其他重要方面
动态和静态对象
动态对象在堆上创建,而静态对象在程序启动时在全局或局部静态存储区中创建。
引用计数
引用计数技术用于管理共享对象的寿命。当对象的引用计数降至 0 时,对象将被销毁。
对象指针
指针可以指向堆或栈上的对象。指针只能指向同类型的对象。
对象拷贝
当一个对象复制到另一个对象时,会创建一个新的对象并复制其成员。
移动语义
移动语义优化了对象移动而不是复制的过程,避免了不必要的复制操作。
资源获取即初始化 (RAII)
RAII 是一种设计模式,确保在对象超出作用域时正确释放资源。

智能指针
智能指针是一种类模板,它自动管理指向堆上对象的指针,并在必要时调用 delete 运算符。
全局构造函数和析构函数
全局构造函数和析构函数在程序启动和退出时调用,用于初始化和销毁全局对象。
虚析构函数
虚析构函数允许派生类对象在调用正确的析构函数时删除其基类。
对象切片
对象切片是一种技术,用于从对象中获取特定成员或部分。
对象聚合
对象聚合允许一个对象包含对另一个对象的引用,从而实现组合关系。
对象继承
对象继承允许派生类继承基类的成员和 *** ,实现多态性和代码重用。