C++的new运算符和delete运算符
动态分配一个int变量的内存,并用指针指向它,利用指针去给变量赋值:
c语言的写法:
int* p1=(int*)malloc(sizeof(int));
*p1=10;
c++的写法: int* p2=new int(10); //注意,是()
动态分配一个int[10]数组的内存,并用指针指向它,利用指针去修改数组中第一个元素的值,然后释放这块内存:
c语言写法:
int* p3=(int*)malloc(sizeof(int)*10);
p3[0]=10;//*(p3+i)=p3[i]
free(p3);
c++的写法:
int* p4=new int[10]; //注意,是[]
p4[0]=10;
delete [] p4;
动态分配一个类对象:
class Teacher
{
public:
Teacher(int a){age=a;cout<<"调用构造函数"<<endl;}
~Teacher(cout<<"调用析构函数"<<endl;);
private:
int age;
}
c语言的写法:
Teacher *pt1=(Teacher*)malloc(sizeof(Teacher));
free(pt1);
c++的写法:
Teacher *pt2=new Teacher(30);
delete pt2;
在动态分配类对象时,malloc,free和new delete的区别:
1.malloc只能分配内存,不能调用类的构造函数,free只能释放内存,不能调用类的析构函数。而new能分配内存,还能调用类的构造函数,delete能释放内存,还能调用类的析构函数。所以,malloc不能初始化类的对象,而new可以初始化类的对象;
2.c++里面malloc和delete,new和free可以混用;
3.malloc和free是c语言的函数,而new和delete是c++的操作符;