malloc/free new/delete
来源:互联网 发布:剑灵捏脸数据怎么下载 编辑:程序博客网 时间:2024/06/08 02:10
相同点:
都可用于申请动态内存和释放内存
不同点:
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)没有默认构造函数的类类型的成员,以及const类型的成员变量和引用类型的成员变量,必须在构造函数的初始化列表中进行初始化。
2)虽然构造函数不能被定义成虚函数,但析构函数可以定义为虚函数,一般来说,如果类中定义了虚函数,析构函数也应被定义成虚析构函数,尤其是类内有申请的动态内存,需要清理和释放的时候。这是因为当基类指针pA指向用new运算符生成的派生类对象B时,delete基类指针时,只会运行基类的析构函数,而不会执行派生类的析构函数,派生类部分没有释放掉从而造成释放不彻底现象。
派生类构造函数调用顺序:
1)完成对象所占整块内存的开辟,由系统在调用构造函数时自动完成;
2)调用基类的构造函数完成基类成员的初始化;
3)若派生类中含对象成员、const成员或引用成员,则必须在初始化列表中完成其初始化;
4)派生类构造函数执行;
成员函数重载、覆盖、隐藏
1)重载:和普通函数重载没有区别,与成员函数是否是虚函数无关,通过形参个数及形参类型来决定,不能通过返回值来决定;
2)覆盖:在派生类中覆盖基类中的同名函数,要求基类函数必须是虚函数,且要求基类和子类中的成员函数完全相同(形参列表、函数返回值);
3)隐藏:两种情况
- 两个函数参数相同,但基类函数不是虚函数——和覆盖的区别在于基类函数是否是虚函数
- 两个函数参数不同,无论基类是否是虚函数,基类函数都会被屏蔽——和重载区别在于是否在同一个类中
0 0
- new delete malloc free
- malloc/free new/delete
- malloc, free, new , delete
- new delete malloc free
- new,delete, malloc, free
- new delete malloc free
- new/delete malloc free
- malloc/free/new/delete
- new delete malloc free
- New/delete malloc/free
- malloc/free+new/delete
- new/delete malloc/free
- malloc/free new/delete
- new、delete、malloc、free
- new/malloc delete/free
- new delete malloc free
- new delete malloc free
- malloc-free new-delete
- android studio for android learning (十七) Toast使用详解
- Android学习路线总结,绝对干货
- hdu 2044
- PKI证书签发系统(web版)
- Educational Codeforces Round 14
- malloc/free new/delete
- Broadcasting
- C++ 模板类的实现为何放在.h中
- spring IOC容器接口体系简介
- 【一天一道LeetCode】#326. Power of Three
- Spring学习笔记四: 从Spring容器中获取Bean
- 【一天一道LeetCode】#231. Power of Two
- 根据表结构自动生成JavaBean,史上最强最专业的表结构转JavaBean的工具(第4版)
- The Unique MST