重载new()delete()的笔记----C++学习之路
来源:互联网 发布:重庆企业网站seo 编辑:程序博客网 时间:2024/05/09 05:15
1.除了之前笔记中的重载,现在重载的是这样的表示:
Foo* pf = new(300,'c')Foo;以下示例:
(1)一般的operator new()重载:
void* operator new(size_t size){ return malloc(size);}(2)这个就是标准库提供的placement new()的重载
void* operator new(size_t size,void* start){ return start;}(3)这是一个崭新的placement operator new()
void* operator new(size_t size,long extra){ return malloc(size+extra);}(4)这又是一个placement new
void* operator new(size_t size,long extra,char init){ return malloc(size+extra);}
(5)这又是一个placement new,但是故意写错第一参数的type
void* operator new(long extra,char init){ return malloc(extra);}//[Error]'operator new'takes type 'size_t'('unsigned int') as first parameter
当然,我们也可以重载对应版本的delete(placement operator delete),但是它们绝不会被delete调用,只有当new所
调用的ctor抛出exception才会调用这些重载operator delete。
如何解释这一句话?
Foo(int){cout<<"Foo::Foo(int)"<<endl; throw Bad(); }//这里故意抛出一场,测试placement operator delete如果调用构造函数会有两个步骤,显示分配空间,然后调用ctor,那么假如这个构造函数抛出异常,说明构造失败,那么
我们就希望把这个分配出来的空间给删除。如果不删除,就会造成内存泄露。
即使写的operator new 与operator delete不能一一对应,也不会报错,如果不写delete的话,表示放弃处理ctor的异常。
阅读全文
0 0
- 重载new()delete()的笔记----C++学习之路
- 关于重载new delete new[] delete[]笔记----C++学习之路
- C++学习笔记--重载new和delete
- 极客班 c++(下)第二周学习笔记 ——重载 operator new & operator delete
- C++new和delete重载
- 智能指针基础std::auto_ptr与new、delete的重载学习笔记
- new delete的局部重载
- new与delete的重载
- C++学习之路(2) C++输入输出 new delete操作符 函数重载
- C++ 笔记,重载new , delete 操作符
- C ++的new、delete
- C++ -- 内存管理 之 重载new delete
- C++之new和delete重载
- 改善C++ 程序的150个建议学习之建议33:小心翼翼地重载operator new/ operator delete
- 【C++】学习小笔记系列-1-new和delete的实际过程。
- C++学习笔记---new/delete
- 【从C到C++学习笔记】域运算符/new/delete运算符/重载/Name managling/extern "C"/带函数默认值参数
- [C++再学习系列] 深入new/delete:Operator new的全局重载
- 模板引擎artTemplate 介绍
- Vue2.0+Vue-cli脚手架
- ubuntu16常用操作命令
- 安卓 版本更新
- 粘贴后出发事件 ueditor
- 重载new()delete()的笔记----C++学习之路
- 浅谈optimizer_mode优化器模式
- 制作pdf文档书签,自动生成or根据目录生成
- ble兼容Android 4 进行的部分优化
- 安卓适配 全面屏的适配(小米MIX2 的适配)
- 台大-林轩田老师-机器学习基石学习笔记9
- 数据库设计注意点
- 【react-router】hashhistory 与 browserhistory有什么区别
- 设计模式之单例模式简介与几种实现方式