实在不好意思,到这里才给大家分享new和delete。
对于非内部数据类型的对象而言,光用malloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。
由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。
new和delete是运算符不是函数
因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。new/delete不是库函数,而是运算符。
一、new关键字
new用来在内存中分配一块内存,new分配的对象是没有名称的,而是返回一个指向该对象的指针
int *p1=new int(1); //pi指向一个动态分配的、初始化值为1的无名对象
int *p2(new int(1)); //同上
二、new的值初始化规则
通用规则
如果类型名后无括号:内置类型或组合类型的对象的值是未定义的,而类类型对象将用默认构造函数进行初始化
如果类型名后有括号:则内置类型/组合类型/类类型都进行默认的初始化
//如果类型名后无括号string *ps = new string; //ps为初始化为空的stringcout << *ps << endl; //值