一,类和对象:
默认成员函数:
1:构造函数:构造函数不能定义为虚函数。
2:析构函数:析构函数一般定义为虚函数,因为如果不定义为虚函数,在继承体系中,子类对象在析构时只会释放基类资源,而对于派生类对象的资源则不会释放,从而会引起资源泄露的问题。而定义为虚函数时,在编译时,会给类创建一个虚函数表,在创建类的对象时,会默认创建一个虚函数指针,指向虚函数表,虚函数表中存放了类的所有虚函数,从而去调用。
3,拷贝构造函数:拷贝函数传参是需要使用应用传参,如果不使用引用传参,在创建形参时会开辟一个临时空间,调用拷贝构造函数将原来的对象拷贝过来,然后继续这个过程,会无休止的调用拷贝构造函数,造成死循环。
4,赋值运算符的重载:传引用
5,取地址操作符重载:
6,const修饰的取地址操作符重载:
内联函数:inline修饰的函数。
内联函数在编译时将其展开,没有函数压栈的开销。
注意:内联函数以空间换时间,所以代码很长或者有循环或者递归的函数不适合内联。
有循环或者递归的函数,编译器会自动忽略内联
内联函数必须在定义时确定,在声明前加inline没有效果
在类内部的成员函数默认内联。
友元函数:
注意:1,友元关系不能被继承
2,友元关系是单向的
3,友元关系不具有传递性。
二,动态内存管理
1,new/delete和malloc/free
相同点:
1,new和delete底层使用的也是malloc和free
区别:
1,new和delete是关键字,malloc和free是函数
2,new和delete是malloc和free的封装,new和delete有构造和析构函数
3,new创建的对象会进行初始化,malloc不会
4,free后空间直接释放掉,delete释放后需要将释放的指针对象设置为null,否则会引起野指针的问题。
2,为什么有了malloc和free,还需要new和delete ?
1:mlloc和free是C语言的内存分配函数,new和delete是c++运算符,为了语言的完整性也需要一个内存分配机制。
2:c++是面向对象设计语言,而对象在创建和销毁的时候需要调用构造函数和析构函数,malloc是函数,不是运算符,不是编译器控制权限之内的东西,不能将构造和析构的任务强加给malloc和free。
3,注意:
new和delete,new[]和delete[],malloc和free要成对使用,否则会出错。