1、内联函数可以是虚函数吗?
答:可以定义但是没有意义,由于虚函数是动态绑定的(运行时去虚表中查找方法,对于多个子类存在多个重写的虚函数只有在运行时才能确定调用的是哪一个),而内联函数是在编译时将调用的函数体插入到调用处,所以编译器会忽略内联标识。
2、可以在构造函数中调用虚函数吗?
答:看情况,若是在基类构造函数中调用虚函数,那么在执行到基类构造函数时子类还未初始化,默认会从基类的虚函数表中去查找,不具有多态性。若是在子类构造函数中调用虚函数,在执行到子类构造函数时子类已经初始化,会从子类的虚表中查找。
3、new出来的对象可以用free释放吗?
答:不行,因为new、delete会调用构造、析构函数,而malloc、free不会,所以使用free释放new出来的对象会导致析构函数未调用,可能出现内存泄漏等问题
4、如何解决内存碎片?
答:应该尽量减少对象的创建与释放,可以使用对象池来复用。虚拟内存可以将零散的内存碎片映射到完整的虚拟内存上,充分利用。部分支持垃圾回收机制的语言有内存紧缩机制,会在回收内存时移动已分配的内存使得零散的内存合并为一个大的内存空间。