有了malloc/free 为什么还要new/delete ?
有了malloc/free 为什么还要new/delete ?
malloc 与 free 是 C++/C 语言的标准库函数,new/delete 是 C++的运算符。它们都可 用于申请动态内存和释放内存。 对于非内部数据类型的对象而言,光用 maloc/free 无法满足动态对象的要求。
对象 在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。
由于 malloc/free 是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数 和析构函数的任务强加于 malloc/free。
因此 C++语言需要一个能完成动态内存分配和初始化工作的运算符 new,以及一个 能完成清理与释放内存工作的运算符 delete。注意 new/delete 不是库函数。
1 #include <iostream> 2 3 /* run this program using the console pauser or add your own getch, system("pause") or input loop */ 4 using namespace std; 5 int main(int argc, char** argv) { 6 //声明字符数组和变量 7 char str[6]; 8 int i; 9 10 //从键盘上输入字符串 11 cout<<"str="; 12 cin>>str; 13 cout<<str<<endl; 14 15 //按数组和下标变量两种方式显示字符数组 16 cout<<str<<endl; 17 for (i=0;i<6;i++) 18 cout<<str[i]; 19 cout<<endl; 20 21 //字符串反向输出 22 for (i=5;i>=0;i--) 23 cout<<str[i]; 24 cout<<endl; 25 26 //将字符数组变成大写字母后输出 27 for (i=0;i<=5;i++) 28 str[i]-=32; //小写字母转换成大写字母 29 cout<<str<<endl; //显示字符串 30 return 0; 31 }