卡码笔记
首页
计算机基础
C++
Java
面经
笔记广场 (opens new window)
代码随想录 (opens new window)
首页
计算机基础
C++
Java
面经
笔记广场 (opens new window)
代码随想录 (opens new window)
  • 基础与语法

  • 面向对象

    • C++构造函数有几种,分别什么作用?
    • 什么是构造函数和析构函数?构造函数和析构函数可以是虚函数吗?为什么?
      • 简要回答
      • 详细回答
      • 代码示例
      • 知识拓展
    • C++的重载和重写,以及它们的区别和实现方式
    • C++怎么实现多态
    • C++中的虚函数和纯虚函数有什么区别?
    • 虚函数怎么实现的?
    • 虚函数表是什么
    • 多重继承的优缺点及菱形继承问题
    • 如何禁止一个类被继承
    • 深拷贝和浅拷贝的区别?
    • this指针的原理
    • C++如何实现一个单例模式?
  • STL 与容器

  • 内存管理

  • C++11 与现代 C++

  • 智能指针

  • 并发与 I/O

# 什么是构造函数和析构函数?构造函数和析构函数可以是虚函数吗?为什么?

# 简要回答

构造函数是用于初始化对象的特殊成员函数,析构函数是用于清理资源的特殊成员函数。

析构函数可以是虚函数(通常基类析构函数应为虚函数),而构造函数不能是虚函数,因为虚函数机制依赖于已构造的虚表指针。

# 详细回答

  • 构造函数

与类同名,无返回类型的特殊成员函数

在对象创建时自动调用,用于初始化对象状态

可以重载(多个不同参数的构造函数)

构造函数不能被声明为虚函数

因为构造期间虚表指针尚没有完全建立,而虚函数调用需要通过虚表,而构造期间这个机制不起作用

  • 析构函数

类名前加上~,无参数返回类型的特殊成员函数

在对象销毁时自动调用,用于释放资源

析构函数可以声明为虚函数(特别是基类析构函数)

确保通过基类指针删除派生类对象时调用正确的析构函数链,避免资源泄漏和未定义行为

如果不是虚函数,通过基类指针删除派生类对象会导致派生类部分未被正确销毁

# 代码示例

#include <iostream>
using namespace std;

class Base {
public:
    Base() { cout << "Base构造函数" << endl; }
    virtual ~Base() { cout << "Base析构函数" << endl; } // 虚析构函数
};

class Derived : public Base {
public:
    Derived() { cout << "Derived构造函数" << endl; }
    ~Derived() override { cout << "Derived析构函数" << endl; }
};

int main() {
    Base* obj = new Derived(); // 通过基类指针创建派生类对象
    delete obj; // 正确调用派生类和基类的析构函数

    // 如果Base析构函数不是虚函数,则只会调用Base的析构函数
    // 导致Derived部分的资源泄漏
    return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# 知识拓展

  • 试试图解 image

  • 构造和析构的顺序:

构造: 基类 → 成员 → 派生类

析构:派生类 → 成员 → 基类

  • 纯虚析构函数: 可以使类变成抽象类,但是必须提供实现
class Abstract {
public:
    virtual ~Abstract() = 0;
};
Abstract::~Abstract() {} // 必须实现
1
2
3
4
5
  • 面试官可能追问

什么情况下必须使用虚析构函数?

当类可能被继承,且可能通过基类指针删除派生类对象时

构造函数中可以调用虚函数吗?

技术上可以,但会静态绑定到当前类的实现,但是通常不这么做

析构函数中抛出异常会怎样?

非常危险,可能导致程序终止,应避免

Last Updated: 3/10/2026, 6:08:48 PM

← C++构造函数有几种,分别什么作用? C++的重载和重写,以及它们的区别和实现方式 →

评论

验证登录状态...

侧边栏
夜间
卡码简历
代码随想录
卡码投递表🔥
2026群
添加客服微信 PS:通过微信后,请发送姓名-学校-年级-2026实习/校招
支持卡码笔记
鼓励/支持/赞赏Carl
1. 如果感觉本站对你很有帮助,也可以请Carl喝杯奶茶,金额大小不重要,心意已经收下
2. 希望大家都能梦想成真,有好的前程,加油💪