知识点1【new delete】
知识点1【new delete】1、new 给基本类型申请空间
void test01()
{
//基本类型
int *p = NULL;
//p = (int *)calloc(1,sizeof(int));
//p = new int(100);// *p = 100
p = new int;
*p = 100;
cout<<"*p = "<<*p<<endl;//100
//释放 free(p)
delete p;
}2、new 申请 基本类型数组空间
![72736fe2322bdd29a69bf6e73e760bdb.png](https://i-blog.csdnimg.cn/blog_migrate/65f7c089cb8d72e2278fa69263e3d95d.jpeg)
![595de987d0b7dc5ffbe60d9de56c257c.png](https://i-blog.csdnimg.cn/blog_migrate/226b7b0c1a16885df9cb58a98d463f08.jpeg)
![9fb200477480e4208798efddbbc5a706.png](https://i-blog.csdnimg.cn/blog_migrate/83b763489f596668fb3c6363ed0ca599.jpeg)
注意:
new 没有加[] delete释放的时候 就不加[]
new 加[] delete释放的时候 就加[]3、new delete 给类对象申请空间
![3da670c0177f64b1e83ec4d245eb9c7b.png](https://i-blog.csdnimg.cn/blog_migrate/28b57f20ed1358eb2ba38bc1f2e628ff.jpeg)
![ee9a6c9b5a9d85bde6aa81bd3a9d96f9.png](https://i-blog.csdnimg.cn/blog_migrate/b7f60dd2d09ac95b27994aa52b0f6381.jpeg)
知识点2【对象数组】本质是数组 只是数组的每个元素是类的对象
![7fc5c18769565ad2cef15c3f50b9b6f2.png](https://i-blog.csdnimg.cn/blog_migrate/7a73acd1bf38756157eeeecb3682c265.jpeg)
运行结果;
![548747fe18d35a87ddcc3d78895ea89a.png](https://i-blog.csdnimg.cn/blog_migrate/7bd6c924fc58acb1609281d56719ed3b.jpeg)
2、如果想让对象数组中的元素调用有参构造 必须人为使用 有参构造初始化。
void test07()
{
//对象数组 arr1是数组 每个元素是Person类型的对象
//定义对象数组的时候 系统会自动给 数组中的每个元素 调用构造函数
//人为 为元素 调用有参构造
//初始化部分 调用有参构造 为初始化部分自动调用默认构造(无参构造)
Person arr1[5]={ Person("lucy",18), Person("bob",20)};
//arr1[0] 第0个元素 就是Person的对象
arr1[0].showPerson();
arr1[1].showPerson();
}
运行结果:
![a445a2e517532fd37b1a39e4921c9d60.png](https://i-blog.csdnimg.cn/blog_migrate/057ac3bbc5a3d67d10309f564973b611.jpeg)
3、用new delete申请 对象数组
void test08()
{
//第一种方式
Person *arr = NULL;
arr = new Person[5];//调用无参构造
delete [] arr;
//第二种方式:
//初始化的元素 调用有参构造 没有初始化 的调用无参构造
Person *arr2 = new Person[5]{Person("lucy",18), Person("bob",20)};
(*(arr2+0)).showPerson();
arr2[0].showPerson();
(arr2+1)->showPerson();
delete [] arr2;
}4、尽量不要用delete释放void *
![d63c07af4ddb5dfec3d9623ff026c8bd.png](https://i-blog.csdnimg.cn/blog_migrate/967fef03875347484bdc2fabeabbcaeb.jpeg)
注意:没有析构?为哈?
delete发现p1指向的类型 为void 无法从void中寻找响应析构函数
![99e8d6bf89a9b874a955868ee6981908.png](https://i-blog.csdnimg.cn/blog_migrate/365754d3aa12dae7dad9bf42c81f13c5.jpeg)
5、malloc、free和new、delete 不可以混搭使用