C++基础

虚函数

一、C++多态
静态多态:函数重载(同一个类中的同名函数但入参不同)、函数模板
动态多态:函数重写(虚函数)
其他相关:函数覆盖(实现了和继承类中一样的函数,但基类没有声明虚函数)

二、虚函数的实现机制
存在虚函数的类会有一张虚函数表,每个虚函数的函数指针都会在这个虚函数表中,该类对象的前4字节(32位系统)/8字节(64位系统)会指向虚函数表的指针。
单继承的情况下,派生类只有一个虚表指针,根据函数重写情况指向基类/继承类的虚函数指针;多继承的情况下,派生类有几个基类就有几个虚表指针,同样根据函数重写情况指向基类/某个继承类的虚函数指针。

三、纯虚函数
纯虚函数没有函数体,只有函数声明,在虚函数声明的结尾加上=0,表明此函数为纯虚函数,包含纯虚函数的类称为抽象类。抽象类通常是作为基类,让派生类去实现纯虚函数。派生类必须实现纯虚函数才能被实例化。

智能指针(C++11)

一、三种智能指针
C++11为C++标准库带来了三个智能指针,分别是shared_ptr、unique_ptr、weak_ptr,使用智能指针就不用去主动管理内存,智能指针会自动释放内存。
unique_ptr:独占了指向的内存空间,其他智能指针不能与之共享;当释放引用或离开作用域时,内存就会被释放。
shared_ptr:采用了引用计数的方式来计算有几个shared_ptr拥有该内存,通过use_count成员函数能够拿到引用计数总数。当引用计数为0,或则离开作用域时,内存就会被释放。
weak_ptr:能直接指向内存空间,只能指向shared_ptr,但是本身不占用引用计数;weak_ptr中的lock成员函数能够对shared_ptr智能指针进行有效性判断,防止空指针引用。

二、shared_ptr的循环引用问题
shared_ptr循环引用会导致智能指针内存不自动释放,可以通过weak_ptr解决循环引用问题。
详见:https://blog.csdn.net/WizardtoH/article/details/81016953

你可能感兴趣的:(面试八股文,c++,开发语言)