this指针来源:
对象不含有,对象调动成员函数,进入到成员函数体时会有this指针;
成员函数调动完毕,this指针释放;
传递this指针:1:扫描数据成元;2:扫描成员函数的声明;3:改写成员函数形参列表,类名*const this;
4:对函数体里的数据成员加上this指针;
this指针不是push压进去的;同类型的对象调动方法区分 this指针;inline函数会把函数执行体直接拷贝,不存在现场保护和恢复,不需要调用,空间变大;
inline函数有循环,递归,不能使用inline方法,代码过长也不用内联;
构造函数时特殊的公有成员函数,也可以私有;函数名和类名相同;
构造函数也可以进行重载;对于内置类型,有空间即可进行操作,面向对象,有空间不一定有对象;给空间,调用构造函数,实例化对象;
函数结束,回收栈帧,需要调用析构函数,函数分配的资源释放,收回空间;
面向对象:空间和对象是两个;全局变量和全局对象的创建和在文件中位置没有关系,加载在.data区;
栈区和数据区的生存期由系统来控制;占位符,由空间一定有对象,占有一位字节;
malloc和new的区别:
1:new能够调用构造函数,delete释放空间之前调用析构函数;malloc只是分配空间
2:malloc申请空间失败返回NULL;new申请空间失败抛出一个异常;
3:new是一个运算符,可以重载,malloc不可以重写;
4:new创建空间不用强制转换类型;
5:new创建空间不用指定空间的大小,malloc需要;
6:new是一个关键字,malloc是一个函数;
7:new的三种调用规则:1:关键字或运算符;2:分配空间调用构造函数来创建对象;
3:定位new:new(s)object(100)调用构造函数,不会开辟空间;有空间才有对象;
class Object{
} 调用了两次构造函数,
int main()
new(&x) Object(100) 用过定位new再次调用构造函数;
引用:1:没有空引用,必须进项初始化;
2:一旦引用称为别名,不能换;
引用返回一个变量或者对象;变量或对象的生存期不受函数生存期的影响;
派生类中定义虚函数必须与基类中的虚函数同名,同返回类型,同参数列表;
实现多态,要用指针或者引用指向执行的多态;虚函数:覆盖地址;派生类重新定义虚函数;当基类被定义为虚函数,其派生类会保持虚的特征;
内存泄漏:
1:对空间不足,由于动态存储分配函数开辟的空间,只在使用后为及时释放,结果导致一直占据该空间,堆空间耗尽,直到程序结束;
2:指针指向的地址丢失;
只有类的成员函数才有this指针;全局函数不含有this指针,引用方式返回;
普通对象可以调用普通函数和常方法,常对象只能调用常方法;
构造函数不宜返回类型作为依据;重载条件--->this 不同可以;下标运算单目运算,引用可以取值,也可以改值;
下标前面可以是数组,也可以时指针(数组退化为指针),前面也可以时对象(下标重载);