1.什么是内存泄漏?如何避免 C++ 中的内存泄漏?
内存泄漏是指在程序运行过程中,申请的内存空间无法被回收,导致内存资源浪费的现象。在 C++ 中,内存泄漏通常发生在动态分配内存的场景下,如使用 new、malloc 等操作符手动分配内存,但未使用 delete、free 等操作符释放内存。
为了避免 C++ 中的内存泄漏,可以采取以下几种措施:
使用 RAII(资源获取即初始化)技术,即使用对象的构造函数在对象被创建时获取资源,在析构函数中释放资源,确保在对象生命周期结束时自动释放资源;
尽量使用智能指针(如 std::shared_ptr、std::unique_ptr 等),它们会在对象被销毁时自动释放资源,避免手动调用 delete 或 free;
在动态分配内存时,使用容器类(如 std::vector、std::map 等)替代指针数组,这样可以避免手动管理内存,减少内存泄漏的风险;
使用内存泄漏检测工具(如 valgrind)检测程序中的内存泄漏问题。
2.C++ 中的引用和指针有什么区别?
在 C++ 中,引用和指针都可以用来间接访问变量,但它们有以下区别:
引用必须在定义时初始化,并且不能被重新绑定到其他变量,而指针可以在任何时候被赋予新的地址;
引用不占用内存空间,它只是变量的别名,而指针占用内存空间;
引用和指针都可以用来修改变量的值,但指针可以指向空地址(nullptr),而引用必须指向一个已存在的对象;
引用通常用于函数参数传递和返回值类型,而指针则通常用于动态内存分配和数组操作。
3.什么是虚函数?如何实现多态?
在 C++ 中,虚函数是一个可以被子类重写的函数,它通过一个虚表来实现动态绑定。当一个子类对象通过指针或引用调用虚函数时,程序会在运行时确定调用的是子类的实现还是父类的实现。
实现多态需要满足以下条件:
父类中定义了虚函数;
子类通过关键字 virtual 重写