构造函数、析构函数、拷贝构造、移动构造
2026/5/8 17:03:30 网站建设 项目流程

一、构造函数 Constructor

作用

创建对象时自动调用,负责初始化成员变量

特点

  • 函数名和类名相同
  • 无返回值
  • 可以重载(多个构造函数)

代码示例

cpp

运行

class Person { public: // 普通构造函数 Person() { cout << "默认构造函数" << endl; } // 有参构造 Person(int a) { cout << "有参构造函数" << endl; } }; int main() { Person p1; // 调用默认构造 Person p2(18); // 调用有参构造 return 0; }

二、析构函数 Destructor

作用

对象销毁时自动调用,负责释放资源(堆内存、文件、网络等)。

特点

  • 名字前加~,和类名一样
  • 无返回值、无参数
  • 只能有一个,不能重载

代码示例

cpp

运行

class Person { public: Person() { cout << "构造函数" << endl; } ~Person() { cout << "析构函数,对象销毁" << endl; } }; int main() { Person p; // 函数结束 p 销毁,自动调用析构 return 0; }

三、拷贝构造函数 Copy Constructor

作用

已有对象初始化新对象,复制一份一模一样的对象。

触发场景

  1. 用旧对象初始化新对象
  2. 对象值传递给函数参数
  3. 函数返回对象

格式

cpp

运行

类名(const 类名& 旧对象)

代码示例

cpp

运行

class Person { public: int age; // 拷贝构造函数 Person(const Person& other) { age = other.age; cout << "拷贝构造函数" << endl; } Person(int a) : age(a) {} }; int main() { Person p1(20); Person p2 = p1; // 触发拷贝构造 return 0; }

浅拷贝 vs 深拷贝

  • 浅拷贝:只复制地址,多个对象共用同一块堆内存,析构会重复释放崩溃
  • 深拷贝:重新开一块新内存,各自独立,安全稳定

四、移动构造函数 Move Constructor(C++11 重点)

作用

临时对象 / 即将销毁对象的资源直接转移给新对象,不复制,只 “搬家”,效率极高

格式

cpp

运行

类名(类名&& 临时对象)

特点

  • 参数是右值引用 &&
  • 接管临时对象资源,不拷贝数据
  • 避免内存拷贝开销,STL 容器大量用到

代码示例

cpp

运行

class Person { public: // 移动构造 Person(Person&& other) { cout << "移动构造函数" << endl; } }; // 返回临时对象 Person createObj() { return Person(); } int main() { Person p = createObj(); // 触发移动构造 return 0; }

四者一句话总结

  1. 构造函数:出生初始化
  2. 析构函数:死亡释放资源
  3. 拷贝构造:复制一个新对象(克隆)
  4. 移动构造:把临时对象资源搬过来(搬家,不复制)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询