C++中new(delete)和malloc(free)的常见问题
来源:互联网 发布:机械厂适合的软件 编辑:程序博客网 时间:2024/06/10 20:16
C++中new(delete)和malloc(free)的常见问题
Q: "delete p"会释放"p"指针,还是"p"指向的内容"*p"?
A: 会释放"p"指向的内容"*p".
"delete"真正的含义是"delete the thing pointed to by";同样free(p)也是删除释放"p"指向的内容.
至于指针p没有做任何的改变,如果想让我们的程序更加健壮,建议加入下面的一行代码:
p = NULL;
尤其在程序中频繁使用p的时候,这行代码将显得很重要.
Q: 我能用"free()"掉由"new"申请到的,用"delete"掉由"malloc()"申请到的内存吗?
A: 不能.
malloc/free,new/delete必需配对使用!
free掉new申请出来的内存或delete掉malloc申请出来的内存该被痛骂一通.
Q: new/delete和malloc/free有什么区别?
A: 这是一个老问题, 面试官常会问到的问题.
可以从是否调用构造函数/析构函数,类型安全性,是否被重载三个方面讨论:
new/delete会调用构造函数/析构函数;
malloc()返回的是一个不具有类型安全性的"void *",而new会返回正确形态的指针;
new/delete是可以被重载的一个运算子;malloc/free是不能被重载的.
Q: 为什么C++不为"new"来搭建一个类型于"malloc"的realloc()的"函数"呢?
A: 避免产生意外.
realloc()这样的函数会破坏大部分的C++对象.
Q: 如何用new/delete去申请/释放数组?
A: 用new[]和delete[]去实现.
int * p_obj = new int[100];
// ...
delete [] p_obj;
在"new"运算式中使用了"[...]",就必须在"delete"运算式中使用"[]".
Q: 忘记了将"[]"用在"delete"由"new int[100]"申请的数组,会发生什么事?
A: 灾难.
new[]和delete[]正确配对是程序员的,而不是编译器的责任.堆(heap)被破坏是最可能产生的后果,更坏的可能是程序down掉.
Q: "delete this"是合法的吗?
A: 不建议这样使用. 然后这样使用是合法的,只要我们足够小心.这里的小心点有:
1)要确定"this"是由"new"申请来的(而不是new []);
2)确保完成"delete this"后,不能再去碰"this"的对象了,甚至不能碰"this"了,包括不能查看它,或是跟NULL比较.
- C++中new(delete)和malloc(free)的常见问题
- c/c++中malloc/free和new/delete的区别
- C/C++ 中 new/delete 和 malloc/free 区别
- [C/C++] malloc/free和new/delete的区别
- C/C++中new/delete malloc/free
- C++malloc/free和new/delete
- C++中malloc/free和new/delete 的使用
- C++中,malloc/free和new/delete的区别
- C++中new/delete和malloc/free的区别
- C++中,new/delete和malloc/free的区别
- C++中,new/delete和malloc/free的区别
- C/C++中malloc,delete和free,malloc的区别
- C/C++语言中malloc/free和new/delete的区别
- C语言 malloc/free和C++中new/delete的区别
- C++中malloc/free和new/delete的区别---补充(15)《Effective C++》
- malloc/free 和 new/delete的区别
- malloc/free和new/delete的区别
- malloc/free 和 new /delete 的区别
- 程序员!什么是机会?
- EJB的专用术语解释
- CHOWN命令使用
- MySQL内存使用-线程独享
- 3dsmax的API函数库文件(chm文件)
- C++中new(delete)和malloc(free)的常见问题
- EJB轻松进阶
- 对象和类
- Lua学习笔记二
- 编程的艺术:漂亮的代码和漂亮的软件
- PHP的可变变量
- 在Windows中读取硬盘
- 人生
- 创业第13天,建立并维护睿驿官方网站 www.rayeen.com