new_delete
new delete是c++的关键字。
new在堆上分配内存,分配类型:基础类型、数组类型、对象。
new delete是操作符,不是函数。
int *p1 = new int; *p1 =10; int *p2 = new int(10); //分配内存的同时,初始化为10 int *arry = new int[4]; //int arry[4];
class A { public: A (int x,int y):a(x),b(y){} private: int a;int b; } A *p3 = new A(1,2); //new一个新的对象(分配空间),然后将指针p3指向这个对象空间。
delete p1; //释放变量 delete [] arry; //释放数组
new操作符,自动会调用构造函数,delete操作符也会自动去调用析构函数。这是与malloc,free的区别。
问题:malloc申请的空间能用delete释放吗?new的空间能用free释放吗?
基础类型:它们是可以的。
数组类型:它们也是可以的。(这里也是指的是基础数据类型数组)
对象类型:使用free释放,不会调用析构函数,编译程序不会报错。
内在的趣味,表面的繁琐