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 int[2]{1,2};

cout<<p2[0]<<" "<<p2[1]<<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 A[1024*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。

相关推荐
Tisfy2 小时前
LeetCode 3740.三个相等元素之间的最小距离 I:今日先暴力,“明日“再哈希
算法·leetcode·哈希算法·题解·模拟·遍历·暴力
独特的螺狮粉2 小时前
城市空气质量简易指数查询卡片:鸿蒙Flutter框架 实现的空气质量查询应用
开发语言·flutter·华为·架构·harmonyos
网域小星球2 小时前
C语言从0入门(八)|函数基础:封装、调用与参数传递精讲
c语言·开发语言
东宇科技2 小时前
如何使用js进行抠图。识别商品主体
开发语言·javascript·ecmascript
Dxy12393102162 小时前
Python使用PyEnchant详解:打造高效拼写检查工具
开发语言·python
汀、人工智能2 小时前
[特殊字符] 第77课:最长递增子序列
数据结构·算法·数据库架构·图论·bfs·最长递增子序列
网域小星球2 小时前
C语言从0入门(十)|二维数组详解与矩阵实战
c语言·算法·矩阵·二维数组·数组遍历
网域小星球2 小时前
C 语言从 0 入门(十五)|综合小项目:菜单交互与简易功能实现
c语言·开发语言·交互
澈2073 小时前
堆排序:高效构建大顶堆实战
数据结构·算法·排序算法