为了账号安全,请及时绑定邮箱和手机立即绑定

求问运算符和函数有什么区别,C++里面不是用New开辟的空间可以用free撤销吗?

求问运算符和函数有什么区别,C++里面不是用New开辟的空间可以用free撤销吗?

C++
MMMHUHU 2021-08-18 18:15:24
运算符和函数有什么区别,C++里面 不是用New开辟的空间可以用free撤销吗 就是可不可以直接用free撤销任意变量空间
查看完整描述

2 回答

?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

运算符是实现某种功能的在C++里面一般是通过函数来实现运算符重载功能后面一个问题用new开辟的空间当然要用delete释放但是一般的变量空间C++会有自己的申请释放机制, 不需要你人工释放楼上说的不错new和delete对应, 这就是C++的申请和释放内存的办法而malloc和free是C的方法

查看完整回答
反对 回复 2021-08-23
?
DIEA

TA贡献1820条经验 获得超2个赞

new delete这是c++的动态内存管理方式
new的同时会调用对象的构造函数
delete的同时会调用对象的析构函数

这就是和malloc, free的区别

比如你

struct foo {
int* p;
foo() { p = new int[11111]; cout << "a"; }
~foo() { delete [] p; }
};


foo* x = (foo*)malloc(sizeof(foo)); // 不会调用构造函数,p不会被初始化,不会输出a
delete x; // 调用析构函数,执行delete [] p 是什么结果自己试下就知道了吧

或者
foo* x = new foo; // 调用构造函数,输出a,初始化p为一个包含11111个int的数组
free(x); // 不会调用析构,delete [] p 不执行,内存泄漏,没疑问吧

至于能不能这样混用,具体的编译器实现可能还有限制,不过我给出的例子应该可以解开你的疑问了:)

 


查看完整回答
反对 回复 2021-08-23
  • 2 回答
  • 0 关注
  • 194 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信