@gzj111220
2016-06-24T14:44:02.000000Z
字数 964
阅读 825
C/C++
相同点:
都可用于申请动态内存和释放内存
不同点:
1)malloc与free是C/C++标准库函数,new/delete是C++的运算符
2)new自动计算需要分配的空间,而malloc需要手工计算字节数
3)new是类型安全的,而malloc不是,比如
int* p = new float[2] ; //编译时错误
int* p = (int*)malloc(2*sizeof(double)); //编译时无法指出错误
4)new 调用operator new 分配足够的空间,并调用相关对象的构造函数,而malloc不能调用构造函数;delete将调用该实例的析构函数,然后调用类的operator delete,以释放该实例空间,而free不能调用析构函数
5)malloc/free需要库文件支持,new/delete不需要
1)完成对象所占整块内存的开辟,由系统在调用构造函数时自动完成;
2)调用基类的构造函数完成基类成员的初始化;
3)若派生类中含对象成员、const成员或引用成员,则必须在初始化列表中完成其初始化;
4)派生类构造函数执行;
1)重载:和普通函数重载没有区别,与成员函数是否是虚函数无关,通过形参个数及形参类型来决定,不能通过返回值来决定;
2)覆盖:在派生类中覆盖基类中的同名函数,要求基类函数必须是虚函数,且要求基类和子类中的成员函数完全相同(形参列表、函数返回值);
3)隐藏:两种情况