c++内存管理

内存管理

c++中创建用new和delete

New和delete要相互匹配可以减少错误。

New对delete;

New\[\]对delete;

#include<iostream>

using namespace std;

int main(){

int *p1=new int;

*p1=3;

cout<<*p1<<endl;

int *p2=new int2{1,2};

cout<<p20<<" "<<p21<<endl;

delete p1;

delete\[\]p2;

return 0;

}

new会调用默认构造和析构。

#include<iostream>

using namespace std;

struct A{

A(int a=0,int b=0)

:_a(a),_b(b)

{

cout<<"init "<<a<<" "<<b<<endl;

}

~A(){

cout<<"~A()"<<endl;

}

int _a,_b;

};

捕获异常

int main(){

try{

A *p1=new A1024\*1024\*1024\*10;

delete p1;

}catch(const exception&e){

cout<<e.what()<<endl;

}

return 0;

}

对比c语言的malloc和free;

New会初始化,

Delete会调用析构。

定位new;

创建指针p2指向一个A类大小的空间。

A*p2=(A*) operator new(sizeof(A));

不会初始化

New(p2)A(1);

调用构造函数初始化。

p2->~A()析构。

Operator delete (p2);

释放空间;

一般直接使用new,delete。

相关推荐
1024奇点8 小时前
【仓颉语言入门 · 第二篇 第 22 课】
开发语言·ide·开源
Warren2Lynch9 小时前
C4 模型详解:利用 Visual Paradigm 可视化软件架构的综合指南
开发语言·uml
FlightYe9 小时前
视界原理之3D视频(四):裸眼、眼镜和头显
android·linux·c++·3d·ffmpeg·音视频
Knight_AL9 小时前
Java 文件下载时文件名中的 `#` 被转换成 `%23`?一次 URL 编码与解码问题排查
java·开发语言
ZhengEnCi10 小时前
GPT-6 Astra 爆改 Qwen 权重真有那么神吗:权重空间编程 0.016% 参数的真相
算法·架构
FRing0310 小时前
vue2干货总结2(v-bind、v-for、v-model、指令修饰符、v-bind操作class和style)
开发语言·前端·vue.js·vue2
罗西的思考10 小时前
【轻量化复刻大模型 / KIMI K3】KDA(Kimi Delta Attention):并行
人工智能·算法·机器学习
by2099911 小时前
C++ 智能指针的所有权与使用
开发语言·c++·经验分享
砚底藏山河11 小时前
python量化自定义周期 K 线合成
java·开发语言·数据库·python·金融
IT召唤狮11 小时前
开源企业级零信任项目Pangolin,零信任能挡住PHP核弹漏洞吗?
开发语言·开源·php