STL空间构造器
来源:互联网 发布:兄弟打印机扫描软件 编辑:程序博客网 时间:2024/04/29 14:43
当c++程序用new/delete运算符进行动态内存操作时,编译器为我们准备了两项工作。一是,调用全局内存分配函数 operator new() / operator delete(); 二是,调用 “构造函数”和“析构函数”。
下面举个例子说明:
class TestType
{
public:
TestType(){}
~TestType(){}
private:
int m_test;
}
TestType* ttData = new TestType();
对于这里的new分配内存,
(1) 编译器调用operator new(sizeof(TestType)) 分配内存。
(2) 编译器调用TestType ::TestType()构造函数,构造对象。
delete ttData;
ttData = Null;
对于这里内存释放:
(1) 编译器首先调用TestType ::~TestType(),释放成员对象的资源。
(2) 编译器调用 operator delete(ttData)释放内存。
bbg中的容器可以放置任何用户自定义类型,但是我们之前提供的simple_alloc 和alloc_pool只有释放和分配内存,没有调用具体类的构造函数和析构函数。还好c++提供了“定制new特性”(喜欢c++就是因为它的灵活)可以满足我们的目的,即在已有内存空间上调用具体类的构造函数。定制new的语法如下:
void * ttData = operator new(sizeof(TestType);
new(ttData) TestType(); //定制new,在指针ttData所指内存上调用 TestType的构造函数
对于内存空间的释放,我们则可以通过显式调用析构函数完成。如,
ttData->~TestType();
具体源码:
- STL空间构造器
- 【STL】STL空间配置器
- STL空间配置器
- STL空间配置器
- STL空间配置器
- 【STL】空间配置器
- STL空间配置器
- STL----空间配置器
- STL-空间配置器
- STL空间配置器
- STL空间配置器
- STL空间配置器
- STL空间配置器
- STL-空间配置器
- STL空间配置器
- STL空间配置器
- 【STL】空间配置器
- STL空间配置器
- 使用mysql可视化工具mysql-front的时候遇到软件过期问题
- Object Null 设计模式
- Spring的多模块配置
- 【ASP.NET Chart】MSChart图片保存到硬盘
- POJ 3264 Balanced Lineup(RMQ)
- STL空间构造器
- 来到csdn的第一天
- 别被直觉所蒙蔽(1):有些事并不总是发生
- PC常见问题记录
- JS学习笔记二
- 呵呵
- Linux Oracle 中文乱码问题解决
- 突然的让人一点心理准备都没
- Flex:Web报表引擎——MyReport 2.0.0.0新功能