全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C++中的构造函数和析构函数是什么?(代码示例)

构造函数在对象创建时自动调用以初始化,析构函数在对象销毁前自动调用以清理资源;二者均不可手动调用,析构顺序与构造相反,是C++资源管理的基石。

构造函数和析构函数是C++中用于管理对象生命周期的特殊成员函数:构造函数在对象创建时自动调用,负责初始化;析构函数在对象销毁前自动调用,负责清理资源。

构造函数:对象诞生时的初始化入口

构造函数名与类名完全相同,无返回类型(连void都不能写),可重载,支持默认参数和委托构造。它确保每个对象在使用前处于有效状态。

常见写法包括:

  • 默认构造函数(无参或全带默认值)
  • 带参构造函数(常用于初始化成员变量)
  • 初始化列表(推荐方式,比在函数体内赋值更高效,尤其对const/引用/无默认构造的成员)

示例:

class Person {
public:
    std::string name;
    int age;
// 默认构造函数
Person() : name("Unknown"), age(0) {}

// 带参构造函数 + 初始化列表
Person(const std::string& n, int a) : name(n), age(a) {}

// 委托构造(C++11起)
Person(int a) : Person("Anonymous", a) {}

};

析构函数:对象告别时的善后工作

析构函数名是在类名前加波浪号~,无参数、无返回值、不能重载、不能被显式调用。它在对象生命周期结束(如局部对象离开作用域、动态对象被delete、容器销毁元素等)时由系统自动调用。

主要用途是释放构造时申请的资源,比如动态内存、文件句柄、网络连接等——这是避免内存泄漏的关键环节。

示例:

class FileManager {
    FILE* file_ptr;
public:
    FileManager(const char* filename) {
        file_ptr = fopen(filename, "r");
        if (!file_ptr) throw std::runtime_error("Cannot open file");
    }
// 析构函数:关闭文件
~FileManager() {
    if (file_ptr) {
        fclose(file_ptr);
        file_ptr = nullptr; // 防止重复关闭(虽非必需,但更安全)
    }
}

};

构造与析构的调用时机很明确

它们不是手动调用的普通函数,而是由编译器严格按对象生命周期插入调用的。例如:

{
    Person p1("Alice", 25);     // 调用 Person(const string&, int)
    FileManager f("data.txt");  // 调用 FileManager(const char*)
} // 作用域结束 → 先调用 ~FileManager(),再调用 ~Person()

注意:析构顺序与构造顺序相反(后构造的先析构),这对有依赖关系的对象很重要。

几个实用提醒

  • 如果类里有指针成员且手动管理内存(new/delete),必须定义析构函数,否则会内存泄漏
  • 若定义了析构函数,通常也该考虑拷贝构造和赋值运算符(“三法则”/C++11后扩展为“五法则”)
  • 现代C++推荐用智能指针(std::unique_ptr)、容器(std::vector)替代裸指针,让析构自动完成资源释放
  • 析构函数应尽量不抛异常(C++11起若析构中抛异常且未捕获,程序直接终止)

基本上就这些。构造和析构是C++资源管理的基石,理解它们的自动性、时机和职责,才能写出安全可靠的类。


# c++  # 作用域  # 运算符  # 赋值运算符  # 成员变量  # 成员函数  # 构造函数  # 析构函数  # const  # void  # 指针  # 委托  # delete  # 对象  # 资源管理  # 这是  # 几个  # 是在  # 句柄  # 是由  # 这对  # 很重要  # 它在  # 也该 


相关文章: 网站设计制作公司地址,网站建设比较好的公司都有哪些?  公司网站制作价格怎么算,公司办个官网需要多少钱?  宝塔面板如何快速创建新站点?  存储型VPS适合搭建中小型网站吗?  如何自定义建站之星网站的导航菜单样式?  SQL查询语句优化的实用方法总结  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  建站三合一如何选?哪家性价比更高?  网站网页制作专业公司,怎样制作自己的网页?  相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?  洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?  广州建站公司哪家好?十大优质服务商推荐  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  已有域名如何免费搭建网站?  如何快速搭建响应式可视化网站?  内网网站制作软件,内网的网站如何发布到外网?  宿州网站制作公司兴策,安徽省低保查询网站?  如何通过虚拟机搭建网站?详细步骤解析  香港服务器建站指南:免备案优势与SEO优化技巧全解析  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  建站之家VIP精选网站模板与SEO优化教程整合指南  已有域名和空间,如何快速搭建网站?  PHP 500报错的快速解决方法  微信小程序 input输入框控件详解及实例(多种示例)  C#怎么使用委托和事件 C# delegate与event编程方法  网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?  广平建站公司哪家专业可靠?如何选择?  如何通过西部建站助手安装IIS服务器?  网站插件制作软件免费下载,网页视频怎么下到本地插件?  ,巨量百应是干嘛的?  网站制作公司,橙子建站是合法的吗?  如何基于云服务器快速搭建个人网站?  广州营销型建站服务商推荐:技术优势与SEO优化解析  高端云建站费用究竟需要多少预算?  如何在IIS中新建站点并解决端口绑定冲突?  公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?  建站主机默认首页配置指南:核心功能与访问路径优化  可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?  网站制作免费,什么网站能看正片电影?  电商网站制作价格怎么算,网上拍卖流程以及规则?  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  如何高效生成建站之星成品网站源码?  网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?  清除minerd进程的简单方法    南京网站制作费用,南京远驱官方网站?  在线教育网站制作平台,山西立德教育官网?  建站之星ASP如何实现CMS高效搭建与安全管理?  大学网站设计制作软件有哪些,如何将网站制作成自己app?  平台云上自助建站如何快速打造专业网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。