深入new/delete:Operator new的全局重载
Operator new 的全局重载
原文地址:http://blog.csdn.net/zhenjing/article/details/4354880
我们经常看到这么一句话: operator new 可以重载, placement new 不可重载。其实此处所说的不可重载应该是指全局的 placement new 不可重载,对于类域中的 placement new 是可以重载的,而且只要重载了任何一种形式的 operator new 都应该顺便重载 placement new , 即 void * operator new(std::size_t count, void *ptr) 。
操作符重载一般用于特定类型,名字解析过程同一般的函数重载。 Operator new 由于其特殊性,编译器提供了默认提供 6 种全局重载形式,同时还允许用户提供自定义的全局 operator new ,其参数甚至可以和全局版本一样,除全局 placement new 外。对于类域,任何形式的 new 都是可以重载的,包括 placement new 形式。
全局的 operator new( 函数 ) 有六种重载形式
void *operator new(std::size_t count)
throw(std::bad_alloc); // 一般的版本
void *operator new(std::size_t count, // 兼容早版本的 new
const std::nothrow_t&) throw(); // 内存分配失败不会抛出异常
void *operator new(std::size_t count, void *ptr) throw(); //placement 版本
void *operator new[](std::size_t count) //
throw(std::bad_alloc);
void *operator new[](std::size_t count, //
const std::nothrow_t&) throw();
void *operator new[](std::size_t count, void *ptr) throw();
重载 operator new 规则
重载 operator new 的参数个数是可以任意的 , 只需要保证第一个参数为 size_t, 返回类型为 void * 即可 , 而且其重载的参数类型也不必包含自定义类型 . 更一般的说 , operator new 的重载更像是一个函数的重载 , 而不是一个操作符的重载 . 如:
全局重载示例:
void* operator new(size_t size) // 重载成功
{
printf("global new/n");
return malloc(size);
//return ::operator new(size); // 递归调用提示 (warning)
}
//void *operator new(std::size_t size, void *ptr) // 无法重载
//{
// printf("global new/n");
// return ::operator new(size,ptr);
//}
void * operator new(size_t size, const std::nothrow_t& e) // 重载成功 , 递归调用提示 (warning)
{
printf("global new/n");
return ::operator new(size, e);
}
一般形式的 operator new 重载示例:
void * operator new(size_t size, int x, int y, int z)
{
...
}
X * pX = new (1, 2, 3) X;
char data[1000][sizeof(foo)];
inline void* operator new(size_t size, int n)
{
return data[n];
}
就可以使用这样有趣的语法来创建对象 :
foo *p=new(6) foo(); // 把对象创建在 data 的第六个单元上
转载于:https://www.cnblogs.com/dragon2012/p/3571838.html
深入new/delete:Operator new的全局重载相关推荐
- c++运算符的全局重载
今天在看候捷的那本stl的时候,第二章有这么一段话 注意,由于*iter != value来检查元素值是否吻合,但是本例中value的数据类型是 int,iter的类型是ListItem<int ...
- c++ operator百样操作符重载(详解)
目录 一.operator== :等号判断重载 二.operator = : 等号赋值重载 三.operator != : 不等于重载 四.operator> : 大于号 或者 小于号 重载 五 ...
- Cpp 对象模型探索 / operator new、operator delete、operator new[] 和 operator delete [] 重载
零.前言 对于函数 operator new 和 operator delete 来说,分为全局重载和局部重载. 全局重载的形式: void *::operator new(size_t size); ...
- C++ 工程实践(2):不要重载全局 ::operator new()
陈硕 (giantchen_AT_gmail) Blog.csdn.net/Solstice 本文只考虑 Linux x86 平台,服务端开发(不考虑 Windows 的跨 DLL 内存分配释放问题) ...
- 重载new、delete和强制类型转换运算符()
1.重载new和delete运算符 内存管理运算符new.new[].delete和delete[]也可以进行重载,其重载形式既可以是类的成员函数,也可以是全局函数.一般情况下,内建的内存管理运算符就 ...
- C++中的new和delete操作符重载
文章目录 1 new和delete操作符重载 1.1 new和delete操作符重载简介 1.2 静态存储区中创建动态对象 1.3 在指定的地址上创建C++对象 2 new[]和delete[]操作符 ...
- C++ 【学习笔记】 - 基础(class、inline、explict、new、delete、static、this、mutable、friend、operator、virtual)
上上一篇:java全家桶 上一篇:C语言 [学习笔记] - 基础.理论(原码/反码/补码).函数(字符串.定义).指针.内存(函数.结构).复合类型.函数(调用原理.指针.接口) 视频:https:/ ...
- c++重载运算符_C/C++编程笔记:运算符重载丨重载C++中的New和Delete运算符
new和delete运算符也可以像C ++中的其他运算符一样重载.New和Delete运算符可以全局重载,也可以在特定类中重载. (1)如果使用某个类的成员函数来重载这些运算符,则意味着这些运算符仅针 ...
- C++中operator关键字(重载操作符)
operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名. 这是C++扩展运算符功能的方法,虽然样子古怪,但也可以理解:一方面要使运算 ...
最新文章
- 电子商务网站的经验教训
- 纠结的Python2.7编码与os.walk()函数的目录参数
- 回复:lerit的关于对象中字段的初始化问题
- 登录form php一个页面跳转页面,Extjs4中表单登录功能、登录成功跳转页面的代码...
- 有道云笔记不需要通过开通会员的方式来去除广告显示
- 《H5 移动营销设计指南》 读书笔记整理
- java privilege的用法_java反射--注解的定义与运用以及权限拦截
- DBASK问答集萃第二期
- Redmi K50电竞版卖点投票:120W神仙秒充一骑绝尘
- vba两个集合的差集_Python中的集合是如何使用的?
- 产品研发过程管理专题——产品需求分析原则二
- 从产品角度谈如何搞定主动用户与被动用户
- Android中网络流量控制(防火墙)——Iptables
- Android单机游戏保存进度,安卓游戏存档修改教程 | 手游网游页游攻略大全
- 【开源项目分享】GitHub中文排行榜 - 帮助你发现高分优秀中文项目-Java
- 波动率模型:现货、期货及期货期权
- Adobe Bridge 2020新增功能
- 【多功能改进】基于OpenCV图像采集的人脸识别网络推流及局域网无线控制系统(将图像在URL地址上输出,可做成网络摄像头,带识别框)
- docker安装pytorch + TensorRT环境 + 自定义镜像视频流
- LeetCode151|翻转字符串中的单词III
热门文章
- 最大流EK和Dinic算法
- 音频信号发生器_1957年,DIY的Hi-Fi 电唱机单电子管音频发生器的音质保真度高...
- vector 中的元素去重
- Java6上开发WebService
- 计算机工作原理 仿真,虚拟DCS仿真工作原理
- java字符串学习_java之字符串学习记录
- killall 后面信号_Linux 下使用 killall 命令终止进程的 8 大用法
- 七夕(情人节)表白女朋友,程序员应该如何装一波13
- 怎么样才能玩转前端所有的CSS背景相关问题?
- 二手宏碁上网本装linux,Acer国内20日首发“上网本” 放弃Linux使用XP