C++类与new和delete操作符
当我们需要为类对象动态分配存储空间时,我们应该使用 C++语言提供的 new 与 new[] 操作符,而不要使用 C语言提供的 malloc() 函数。
虽然 malloc() 函数具有分配存储空间的功能,但是这些函数除了分配存储空间外,不会调用类的构造函数。而 C++语言提供的 new 和 new[] 操作符则不会如此,使用它们为对象分配存储空间的同时,它们也会调用相应的构造函数。
操作符 delete 和 delete[] 在释放对象存储空间的同时也会调用析构函数,而 free() 函数则不会调用析构函数。
【例 1】
声明:《C++系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
虽然 malloc() 函数具有分配存储空间的功能,但是这些函数除了分配存储空间外,不会调用类的构造函数。而 C++语言提供的 new 和 new[] 操作符则不会如此,使用它们为对象分配存储空间的同时,它们也会调用相应的构造函数。
操作符 delete 和 delete[] 在释放对象存储空间的同时也会调用析构函数,而 free() 函数则不会调用析构函数。
【例 1】
#include<iostream> using namespace std; class test { public: test(int i = 1){num = i;cout<<num<<" Constructor"<<endl;} ~test(){cout<<num<<" Destructor"<<endl;} private: int num; }; int main() { test * t0 = new test(0); test * t1 = new test[5]; test * t2 = (test *)malloc(sizeof(test)); delete t0; delete[] t1; free(t2); return 0; }程序运行结果:
0 Constructor
1 Constructor
1 Constructor
1 Constructor
1 Constructor
1 Constructor
0 Destructor
1 Destructor
1 Destructor
1 Destructor
1 Destructor
1 Destructor
delete t0;
的语句的时候就已经要求编译器销毁t0对象了,此时其它对象还处于存活期,因此 t0 先走一步,调用析构函数。之后再销毁 t1 所指向的对象数组。声明:《C++系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。