STL中的内存分配方式——2

本文详细介绍了STL中的构造和析构过程,包括如何使用placement new在指定内存位置构造对象,以及如何通过调用析构函数来销毁对象。此外,还探讨了不同情况下对析构函数的调用是否必要的条件。

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

今天又看了点stl源码分析,记下学到的知识

构造和析构:(这个跟前面说的方式是一样的)

在stl 中 内存分配和构造是分为两个部分的,而精髓是在内存分配中的特别是第二级内存分配,不过这里不涉及到内存分配,只是重复下前面说到的构造和析构:

构造:通过 placement new  在给定的一块空间上构造一个新的对象或者赋予新的值。

析构:通过调用析构函数来析构掉对象,如果这块空间的内容是has_trivial_destructor类型,那么直接就忽略掉析构。

构造:

析构:

单个元素空间析构:

如果是一段空间:

我这里省掉了 对元素类型的识别,因为有些类型的析构函数是不需要调用的,或者像内置类型就根本没有析构函数。但是因为现在还不知道怎么判断元素的数值性别,所以就省掉了很多处理。

如果是一段字符空间:

就直接忽略。

空间分配的问题在STL中有2级处理方式,这要看分配空间的大小,如果大于128bytes就用第一级方式,这里说下第一级处理方式,第二级后面再说。

分配空间:

是直接用malloc来完成的,但是我这里没有写明如果分配失败的情况,而是直接exit出来,书上模拟了一个set_new_handler方法,然后不停的循环malloc。

因为set_new_handler这个实现方式看不懂,所以就不能自己实现。

重新分配空间:

然后是释放空间,调用 free 来直接释放。

好了,上面就是今天看到的书上面的知识,感觉上面都是浮云,精髓是在第二级分配方式上面的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值