static用法及优点:
用法:不能在类声明中初始化,不能通过构造函数初始化,在定义时初始化
1:static 成员 在类的作用域,避免与其他类成员,全局变量冲突。
阻止一个类的实例化:
纯虚函数,构造函数声明为public
在类内部建对象,不允许在外部建对象
main()执行前做了什么
全局对象的构造函数
用_onexit()注册的函数
// atexit()注册的函数在main退出后执行
什么情况只能用构造函数初始化,不能用赋值初始化
const成员,引用成员
基类的析构是虚函数原因
指针调用对象,析构时执行的是指针类的析构函数。虚函数才能通过覆盖使其析构时调子类虚函数
构造不能是虚函数原因
虚函数调用:是一种在只有部分信息知道的情况下工作的机制,构造需要知道对象准确的类型。
空指针与悬垂指针
空指针:nullptr,null
垂悬指针:指针指向的空间delete后。指针就是垂悬指针
new+delete与malloc+free
malloc更具大小分匹配空间,不初始化。
new更具对象分匹配空间,默认初始化。
什么是类型安全
变量类型不能随意转换。
int a = 2.33; //可以执行 , 所以c++不是类型安全的
引用做返回值的好处与规则
内存中不产生返回值的副本。
正因如此,不可以返回局部变量的引用。//子函数结束,局部变量清空,引用无效了。
不可以返回子函数内malloc的内存的引用。//子函数结束,虽然内存没有释放但,指向内存的指针释放了,引用1也就无效了。
本质:函数参数为引用时,函数的栈不需要额外存储引用,实际上什么也不传,而是直接就用ebp和偏移去找。