c++ 内存分配及相关关键字

本文介绍了C++中动态内存分配的关键字,包括allocator如何分离内存分配与对象构造。同时,文章详细讨论了new、delete与new[]/delete[]之间的区别,特别是对于非内置对象,new操作符会额外存储数组大小。使用delete[]时,会根据存储的大小来释放所有对象。此外,文章还提到了placement new的概念,它允许在特定地址上构建对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • allocator 动态分配内存,将内存分配和对象构造分开。

https://blog.youkuaiyun.com/u012333003/article/details/22104939

  • new、delete 和 new[]/delete[]的区别

参考链接https://blog.youkuaiyun.com/zyazky/article/details/52627200

int *pia = new int[10];
delete []pia;

1.对于非内置对象,在 new [] 时将多分配 4 个字节,用来存储数组的大小。调用delete[]时会先取出数组大小,传入 operator delete[] 函数的参数不是数组对象的指针 pAa,而是 pAa 的值减 4。

2.使用 new [] 用 delete 来释放对象的提前是:对象的类型是内置类型或者是无自定义的析构函数的类类型

如果是自定义析构函数的类,用delete只释放了第一个对象

  • new的使用

参考链接:https://blog.youkuaiyun.com/caimagic/article/details/51493741

throwing (1)
void* operator new (std::size_t size) throw (std::bad_alloc);
nothrow (2) 
void* operator new (std::size_t size, const std::nothrow_t& nothrow_value) throw();
placement (3) 
void* operator new (std::size_t size, void* ptr) throw();

placement new 的方法是实现在ptr所指地址上构建一个对象(通过调用其构造函数)。

A* a = new A; //调用throwing(1)
A* a = new(std::nothrow) A; //调用nothrow(2)
char buf[100]; new(buf) A(); //placement 内存池技术

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值