1:为什么析构函数必须是虚函数?为什么C++默认的析构函数不是虚函数?
将可能会被继承的父类的析构函数设置为虚函数,可以保障我们new一个子类,然后使用基类指针指向该子类对象,释放基类指针可以释放掉子类的空间,防止内存泄漏。
C++默认的析构函数不是虚函数是因为虚函数需要额外的虚函数表和虚表指针,占用额外的内存;对于不会被继承的类来说,其析构函数如果是虚函数就会浪费内存;因此C++默认的析构函数不是虚函数,而是当其需要作为父类的时候,才设置为虚函数。
2:请你说一下函数指针
定义:指向函数的指针变量,用途:调用函数和做函数的参数。比如回调函数。
例子:char* fun(char* p){} // 函数fun
char* (*pf)(char* p)//函数指针pf
pf=fun;
pf(p);通过函数指针pf调用函数fun
3:C++析构函数的作用
当对象结束其生命周期的时候,系统会自动调用,不带任何参数也没有返回值;只能有一个析构函数,不能重载;如果一个类中有指针,且在使用过过程中动态申请了内存;那么最好显示构造析构函数在销毁类之前,释放申请的内存空间,避免内存泄漏。类的析构顺序:(1)派生类本身的析构函数;(2)对象成员析构函数 (3)基类析构函数。
4:strcpy 字符串拷贝函数
char* strcpy(char* dest;const char* src)
从src逐字节拷贝到dest,直到遇到'\0'结束,因为没有指定长度,可能会导致拷贝越界,造成缓冲区溢出漏洞,安全版本是strncpy函数。strlen函数是计算字符串长度的函数,返回从开始到'\0'之间的字符个数。
5:以下四行代码的区别是什么?
const char* arr=“123”;
字符串常量保存 在常量区。不能通过brr区修改123的值
6:const修饰的成员函数目的是什么?
const修饰的成员函数表明函数调用不会对对象做出任何更改,事实上,如果确认不会对对象做出更改,就应该为函数加上const限定
网友评论