C++ new 和 delete 详细解析
C++中的new 和delete 是操作符,new 分配对象时候会自动调用构造函数,delete对象时候,会自动调用析构函数,而C语言中 malloc() 和 free() 是函数。 理论上malloc free 和 new 、delete 可以混搭用,但是最好不要这样用,也不能保证程序正确运行。
C++中new 和delete的语法格式如下:
#include "stdlib.h" #include "stdio.h" #include "string.h" #include <iostream> using namespace std; //new 和delete是操作符 //malloc() 和free() 是函数 //new 在堆上分配基础类型、分配数组类型、分配对象 int main01() { //new基础类型 int* p = (int*)malloc(sizeof(int)); free(p); int* p2 = new int; *p2 = 101; printf("*p2:%d \n", *p2); delete p2; //开辟一个存放整数的空间,并指定该整数的初值为100 int* p3 = new int(100); system("pause"); return 0; } class Test { public: Test(int mya, int myb) { cout << "构造函数,我被调用了" <<endl; a = mya; b = myb; } ~Test() { cout << "析构函数,我被调用了" << endl; } int getA(){ return a; } protected: private: int a; int b; }; int main() { //new数组 int* p1 = (int*)malloc(10*sizeof(int)); //int a[10] p1[0] = 1 ; free(p1); int* p2 = new int[10]; p2[0] = 1; p2[1] = 2; delete [] p2; //new对象 new操作符也会自动的调用这个类的构造函数 //delete自动的调用这个类的析构函数,说明程序员可以 //手动控制类对象的生命周期 Test* p3 = new Test(1,2); cout << p3->getA() << endl; delete p3; system("pause"); return 0; }