84669인 학습
152542인 학습
20005인 학습
5487인 학습
7821인 학습
359900인 학습
3350인 학습
180660인 학습
48569인 학습
18603인 학습
40936인 학습
1549인 학습
1183인 학습
32909인 학습
c++中new和free可以结合使用吗?
如下例,我new一个char数组,使用free释放,会不会造成生成什么安全问题?
代码可以编译运行,谢谢各位大神指点。
char * ch = new char[10]; for (int i = 0; i < 10; i++) { ch[i] = '0' + i; } free(ch);
光阴似箭催人老,日月如移越少年。
new和delete必须成对的使用,不能和malloc|free混合使用,你那么写可能对于基本类型是没有问题的,但是一旦设涉及到构造函数与析构函数就不行了,养成习惯是非常重要的,而且标准库貌似没有规定new一定要使用malloc来实现,所以new的东西还是需要delete,而不是free
new
delete
malloc|free
malloc
free
用delete更好
用free有可能new出来的对象未执行析构函数而可能导致程序出错
不建议这样使用,还是new/delete ,malloc/free搭配使用
因为C++标准没有要求new的内存分配是由malloc分配的,虽然有一些C++实现是这么做的,但是并不是所有的。而且new操作符是可以被重载的,可以写自定义的内存分配代码,这种情况肯定不能free。此外对于new的类对象,不可以调用free释放,因为析构函数不会被调用。
首先:new和delete底层使用malloc和free实现的其次:当是基本的数据类型时,delete和delete[]可以混用用free也可以释放new出的空间,但是new[]的有时候就不可以重点是最好还是不要混用
new
和delete
必须成对的使用,不能和malloc|free
混合使用,你那么写可能对于基本类型是没有问题的,但是一旦设涉及到构造函数与析构函数就不行了,养成习惯是非常重要的,
而且标准库貌似没有规定
new
一定要使用malloc
来实现,所以new
的东西还是需要delete
,而不是free
用
delete
更好用free有可能new出来的对象未执行析构函数而可能导致程序出错
不建议这样使用,还是new/delete ,malloc/free搭配使用
因为C++标准没有要求new的内存分配是由malloc分配的,虽然有一些C++实现是这么做的,但是并不是所有的。而且new操作符是可以被重载的,可以写自定义的内存分配代码,这种情况肯定不能free。此外对于new的类对象,不可以调用free释放,因为析构函数不会被调用。
首先:new和delete底层使用malloc和free实现的
其次:当是基本的数据类型时,delete和delete[]可以混用
用free也可以释放new出的空间,但是new[]的有时候就不可以
重点是最好还是不要混用