#include "iostream"using namespace std;int main(){ //1.基础的使用 //new 基本类型 int *p = (int *)malloc(sizeof(int)); free(p); int *p2 = new int; delete p2; //分配数组 int *p3 = new int[4]; p3[0] = 1; p3[1] = 2; p3[2] = 2; p3[3] = 3; cout << p3[0] << endl; delete[] p3; system("pause"); return 0;}这里面只需要注意一点就是基础类型和数组类型的删除区别就OK。深入
1.区别#include "iostream"using namespace std;class MyClass{public: MyClass() { cout << "我是构造函数" << endl; } ~MyClass() { cout << "我是析构函数" << endl; }PRivate:};int main(){ //1.基础的使用 //new 基本类型 int *p = (int *)malloc(sizeof(int)); //free(p); delete p; int *p2 = new int; //delete p2; free(p2); //分配数组 int *p3 = new int[4]; p3[0] = 1; p3[1] = 2; p3[2] = 2; p3[3] = 3; cout << p3[0] << endl; //delete[] p3; free(p3); //我们在这里发现如果我用malloc和用new创建的基础对象在使用方面没什么区别 //free和delete也可以相互的删除new和malloc的内存 //区别在对象的时候不一样 MyClass *my = (MyClass *)malloc(sizeof(MyClass)); system("pause"); return 0;}我们发现没有执行构造函数。#include "iostream"using namespace std;class MyClass{public: MyClass() { cout << "我是构造函数" << endl; } ~MyClass() { cout << "我是析构函数" << endl; }private:};int main(){ //1.基础的使用 //new 基本类型 int *p = (int *)malloc(sizeof(int)); //free(p); delete p; int *p2 = new int; //delete p2; free(p2); //分配数组 int *p3 = new int[4]; p3[0] = 1; p3[1] = 2; p3[2] = 2; p3[3] = 3; cout << p3[0] << endl; //delete[] p3; free(p3); //我们在这里发现如果我用malloc和用new创建的基础对象在使用方面没什么区别 //free和delete也可以相互的删除new和malloc的内存 //区别在对象的时候不一样 MyClass *my = (MyClass *)malloc(sizeof(MyClass)); MyClass *my1 = new MyClass(); system("pause"); return 0;}new的话可以执行构造函数#include "iostream"using namespace std;class MyClass{public: MyClass() { cout << "我是构造函数" << endl; } ~MyClass() { cout << "我是析构函数" << endl; }private:};int main(){ //1.基础的使用 //new 基本类型 int *p = (int *)malloc(sizeof(int)); //free(p); delete p; int *p2 = new int; //delete p2; free(p2); //分配数组 int *p3 = new int[4]; p3[0] = 1; p3[1] = 2; p3[2] = 2; p3[3] = 3; cout << p3[0] << endl; //delete[] p3; free(p3); //我们在这里发现如果我用malloc和用new创建的基础对象在使用方面没什么区别 //free和delete也可以相互的删除new和malloc的内存 //区别在对象的时候不一样 MyClass *my = (MyClass *)malloc(sizeof(MyClass)); free(my); MyClass *my1 = new MyClass(); delete(my1); system("pause"); return 0;}总结
从以上的代码中我们可以看出,malloc和free是不执行构造函数和析构函数的,但是new和delete他们组成是要自动调用构造函数还有析构函数的。如果是基础的类型的话这两者基本上没有区别。
新闻热点
疑难解答