C++new和delete详细解析

发表于:2015-5-27 10:20

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:weijingyu    来源:51Testing软件测试网采编

  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;
}
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号