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

运算符和函数有什么区别,C++里面 不是用New开辟的空间可以用free撤销吗 就是可不可以直接用free撤销任意变量空间

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 不执行,内存泄漏,没疑问吧

至于能不能这样混用,具体的编译器实现可能还有限制,不过我给出的例子应该可以解开你的疑问了:)
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-08-08
运算符是实现某种功能的在C++里面一般是通过函数来实现运算符重载功能后面一个问题用new开辟的空间当然要用delete释放但是一般的变量空间C++会有自己的申请释放机制, 不需要你人工释放楼上说的不错new和delete对应, 这就是C++的申请和释放内存的办法而malloc和free是C的方法
第2个回答  2013-08-08
我可以这样跟你说,运算符是C语言的一部分必备的元素,而函数则是方便重复使用代码一种技术.
第3个回答  2013-08-08
new与delete对应,malloc与free对应。交叉使用容易出错。
相似回答