#include <iostream>
using namespace std;
// 1 new delete 操作符 C++关键字
// malloc free 函数
// 2 new在堆上分配内存
// 分配基础类型,分配数组类型,分配对象
//基础类型和基础类型的数组 可以混用 malloc函数分配内存 delete操作符释放内存 ok
//基础类型和基础类型的数组 混用 new分配内存 free()函数释放内存 ok
// 类的时候,不要混搭,malloc函数和free函数不会调用构造或析构函数。
// new操作符会自动的调用类的构造函数
// delete操作符会自动的调用类的析构函数
void main01() {
// new基础类型
int* p = (int*)malloc(sizeof(int));
free(p);
// <==> 等价于
int* p2 = new int; // 相当于上面的
//*p2 = 101;
delete p2;
int* p3 = new int(100); // 分配内存的同时初始化
delete p3;
system("pause");
}
void main02() {
// new数组
int* p = (int*)malloc(10 * sizeof(int)); // int a[10];
p[0] = 1;
free(p);
//
int* p2 = new int[10]; // int a[10];
p2[0] = 1;
p2[1] = 2;
delete[] p2;
system("pause");
}
class Test {
public:
Test(int mya, int myb) {
a = mya;
b = myb;
cout << "构造函数" << endl;
}
~Test() {
cout << "析构函数" << endl;
}
int getA() {
return a;
}
protected:
private:
int a;
int b;
};
void getTestObj(Test** my) {
Test* p = new Test(2, 2);
*my = p;
}
/*void getTestObj01(Test* my) {
my = new Test(2, 2);
}*/
void main() {
//Test t1(1, 2); // 在临时区分配内存
// new对象 : new + 类型 返回内存首地址
// new操作符也会自动的调用这个类的构造函数
// delete操作符自动的调用这个类的析构函数
// 相当于我们程序员手动的控制类的对象的生命周期
Test* p = new Test(1, 2);
cout << "p->a: " << p->getA() << endl;
delete p;
//free(p); // free不会调用类的析构函数,不能混用
getTestObj(&p);
delete p;
//getTestObj01(p);
//cout << "p->a: " << p->getA() << endl;
{
Test* p3 = (Test*)malloc(sizeof(Test));
delete p3;
}
system("pause");
}
C++ new和delete操作符
于 2022-07-05 20:47:16 首次发布