一、分析区别
首先,我们先对new和delete表达式有深入了解,先看下面的语句
string *sp=new string("hello");
上述代码,实际上发生了三个步骤,第一步,调用名为operator new 的标准库函数,分配足够大的原始化的未类型化的内存,来保存指定类型的一个对象;第二步,运行该类型的一个构造函数,用于初始化构造对象;最后,返回指向新分配并设定了处置的指针;
上述,代码中的new,其实就是所谓的new operator操作,这个操作符是由语言内建的,不能改变意义,它的动作就分为上面三步:分配原始内存,初始化,返回指针;
再看
delete sp;
上述语句实际上有两步,第一步,对sp所指的对象调用适当的析构函数;第二步,调用名为operator delete的标准库函数释放该对象所用的内存;即delete sp,就相当于delete operator,它的动作分为以下两步:调用析构函