作用域和生命周期问题:
作用域 生命周期 存放位置
局部 从定义处开始到函数结束 函数开始到函数结束 栈空间
块 从定义处开始到块结束 函数开始到函数结束 栈空间
全局 工程的任何地方 程序模块载入到卸载 数据区
静态全局 工程的任何地方 程序模块载入到卸载 数据区
析构函数必须是虚函数 而c++默认函数不是虚函数原因
将可能会被继承的父类的析构函数设置为虚函数,可以保证当我们new一个子类,然后使用基类指针指向该子类对象,释放基类指针时可以释放掉子类的空间,防止内存泄漏。
C++默认的析构函数不是虚函数是因为虚函数需要额外的虚函数表和虚表指针,占用额外的内存。而对于不会被继承的类来说,其析构函数如果是虚函数,就会浪费内存。因此C++默认的析构函数不是虚函数,而是只有当需要当作父类时,设置为虚函数。
指针常量和常量指针
指针常量本质是一个常量,而用指针修饰它。指针常量的值是指针,这个值因为是常量,所以不能被赋值。
指针不可改变,指向地址内容可以发生改变 表现形式 int * const p
常量指针又叫常指针,可以理解为常量的指针,也即这个是指针,但指向的是个常量,这个常量是指针的值(地址),而不是地址指向的值。
限制了通过该指针修改变量的内容 表现形式 int const*p