运算符和函数有什么区别,C++里面 不是用New开辟的空间可以用free撤销吗 就是可不可以直接用free撤销任意变量空间
2 回答
拉风的咖菲猫
TA贡献1995条经验 获得超2个赞
运算符是实现某种功能的在C++里面一般是通过函数来实现运算符重载功能后面一个问题用new开辟的空间当然要用delete释放但是一般的变量空间C++会有自己的申请释放机制, 不需要你人工释放楼上说的不错new和delete对应, 这就是C++的申请和释放内存的办法而malloc和free是C的方法
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 不执行,内存泄漏,没疑问吧
至于能不能这样混用,具体的编译器实现可能还有限制,不过我给出的例子应该可以解开你的疑问了:)
- 2 回答
- 0 关注
- 194 浏览
添加回答
举报
0/150
提交
取消