operator new之non-member operator new固守规则
2016-07-10 23:59
375 查看
non-member opertor new:
void* operator new(std::size_t size) throw(std::bad_alloc);
non-member operator new的常规有:
1)入参size为0时,也返回一个合法的指针
2)分配内存失败时必须调用operator new的错误处理函数new_handler
3)如果new无法分配size大小的内存,就要抛出一个bad_alloc异常
下面是个non-member operator new伪码pseuocode:
void* operator new(std::size_t size) throw(std::bad_alloc)
{
using namespace std;
//如果用户申请0大小的内存,为了返回一个合法指针,我们将它视为1Byte来申请
if (size == 0)
{
size = 1;
}
while(true)
{
尝试分配size bytes;
if (分配成功)
return 内存地址;
//分配失败,调用错误处理函数new_handler
//此处机智使用了set_new_handler的返回值来构造set_new_handler的入参
std::new_handler handler = std::set_new_handler(0);
set_new_handler(handler);
if (handler) (*handler)();
else throw std::bad_alloc();
}
}
(完)
void* operator new(std::size_t size) throw(std::bad_alloc);
non-member operator new的常规有:
1)入参size为0时,也返回一个合法的指针
2)分配内存失败时必须调用operator new的错误处理函数new_handler
3)如果new无法分配size大小的内存,就要抛出一个bad_alloc异常
下面是个non-member operator new伪码pseuocode:
void* operator new(std::size_t size) throw(std::bad_alloc)
{
using namespace std;
//如果用户申请0大小的内存,为了返回一个合法指针,我们将它视为1Byte来申请
if (size == 0)
{
size = 1;
}
while(true)
{
尝试分配size bytes;
if (分配成功)
return 内存地址;
//分配失败,调用错误处理函数new_handler
//此处机智使用了set_new_handler的返回值来构造set_new_handler的入参
std::new_handler handler = std::set_new_handler(0);
set_new_handler(handler);
if (handler) (*handler)();
else throw std::bad_alloc();
}
}
(完)
相关文章推荐
- 图解微服务架构演进
- Java应用架构的演化之路
- Linux入门---创建新用户
- 成为Java GC专家(4)—Apache的MaxClients参数详解及其在Tomcat执行FullGC时的影响
- 手游页游和端游的服务端的架构与区别
- linux下串口工具minicom
- NET Core1.0之CentOS平台开发控制台程序DEMO
- [置顶] 基于java聊聊架构
- VirtualBox安装centos详解
- JavaWeb核心编程之Tomcat安装和配置
- 使用CXF框架开发WebService客户端
- linux下的文件查找
- linux中的pidof工具简介
- OpenGLES入门笔记 :OpenGLES光照基础总结2 获取法向量
- operator new之签名式new/delete(signature operator new/delete)
- shell 脚本中常用字符含义与vim编辑器中的快捷键
- Excel表单的读取与处理 PHPExcel与Apache POI
- Linux下MPI并行编程环境搭建配置
- MVVM的架构设计与团队协作 with StoryBoard
- 嵌入式linux基于netkit-ftp-0.17的ftp客户端移植