operator new 函数、operator delete 函数 和 定位 new
来源:互联网 发布:三体结局 知乎 编辑:程序博客网 时间:2024/05/17 03:15
我们知道在C++中申请内存空间和释放内存空间是用new和delete来完成,我们先来看new表达式:
string *sp = new new string("initialized");实际上发生了三个步骤:
(1)首先,该表达式调用名为operator new的标准库函数,分配足够大的原始的未类型化的内存,以保存指定类型的一个对象;
(2)接下来,运行该类型的一个构造函数,用指定初始化式构造对象;
(3)最后,返回指向新分配并构造的对象的指针。
再来看delete表达式:
delete sp;当使用delete表达式delete sp;删除动态分配对象的时候,发生两个步骤:
(1)首先,对sp指向的对象运行适当的析构函数;
(2)然后,通过调用名为operator delete 的标准库函数释放改对象所用的内存。
1.operator new 和 operator delete 接口
operator new 和 operator delete 函数有两个重载版本,每个版本支持相关的new表达式和delete表达式:
void *operator new(size_t); //allocate an objectvoid *operator new [ ] (size_t); //allocate an arrayvoid *operator delete (void*); //free an objectvoid *operator delete [ ] (void*) //free an array2.定位new表达式
标准库函数operator new 和 operator delete 是allocator和deallocate成员的低级版本,它们都分配但不初始化内存。
allocator的成员,有第三章new表达式,称为定位new(placement new)。定位new表达式在已分配的原始内存中初始化一个对象,它与new的其他版本的不同之处在于,它不分配内存。相反,它接受指向已分配但尚未构造内存的指针,并在该内存中初始化一个对象。实际上,定位new表达式使我们能够在特定的、预分配的内存地址构造一个对象。实际上,定位new表达式使我们能够在特定的、预分配的内存地址构造一个对象。
定位new表达式的形式是:
new (place_address) type
new (place_address) type (initializer-list)
其中place_address必须是一个指针,而initializer-list提供了(可能为空的)初始化列表,以便在构造新分配的对象时使用。
allocator<T> :
allocate:分配内存-----operator new
deallocate:释放内存----operator delete
construct:构建对象-----定位new
destory:析构对象------显式析构调用
- operator new 函数、operator delete 函数 和 定位 new
- new/operator运算符,operator new/operator delete函数,定位new
- new/delete operator和operator new/delete
- new operator和delete operator
- operator new 和 operator delete
- operator new 和 operator delete
- operator new和operator delete
- operator new和operator delete
- operator new 和 delete
- C++ 的 new 和 delete : new operator, operator new, placement new, delete operator, operator delete
- 解析C++中的new、operator new、operator new[]和delete、operator delete、operator delete[](上)
- 解析C++中的new、operator new、operator new[]和delete、operator delete、operator delete[](下)
- Operator new函数
- 学习C++(operator new 和 operator delete)
- operator new和operator delete 的用法
- 重载operator new 和 operator delete
- c++重载operator new和operator delete
- 重写operator new 和 operator delete
- 实现绝对定位元素的水平垂直居中
- 统计学习方法~笔记1
- leetcode:Basic Calculator II
- 怎么判断一个ResultSet为空 ,有没有内容
- unity实现简单的摄像机切换
- operator new 函数、operator delete 函数 和 定位 new
- 浅谈面向对象第三枪
- 浅谈Linux文件系统
- 指针的初始化
- 字节对齐C++
- UILabel
- hdu1730Northcott Game nim
- vi中常用命令
- java设计模式学习笔记--可配置的简单工厂模式