//############################################################################
// Placement New 和 Placement Delete // 标准的Operator new/delete:
void* operator new(std::size_t size) throw(std::bad_alloc);
void operator delete(void* pMemory) throw(); /*
* Placement new: 除了size_t param参数外,还带其他额外参数的operator new
* Placement delete: 除了void* param参数外,还带其他额外参数的operator delete
*
* 注意: 他们需要成对提供
*/ static void* operator new(size_t szie, void* pMemory) throw(bad_alloc);
static void* operator delete(void* pMemory, void* pMemory) throw();
/*
* STL中提供. 新创建的对象将放在pMemory位置.
*/ int function_A() {
int buffer[100000];
dog* pd = new(buffer) dog();
} // 是否需要delete pd?
// 内存并不是在堆上分配,所以不需要释放,但是需要手动析构
// pd->Dog::~Dog(); //显式地调用析构函数
// 注意此析构方法,不能用于普通的在栈上分配的对象,否则离开作用域的时候会再析构一次
// 同样也不能用于普通的动态分配对象,只会析构,不会释放内存 class dog {
...
dog() { throw 20; }
static void* operator new(size_t szie, ostream& log) throw(bad_alloc){
log << "Customized new for dog.\n";
return ::operator new(size);
}
// static void* operator delete(void* pMemory, ostream& log) throw() {
// log << "Customized delete for dog.\n";
// free(pMemory);
// }
} ...
dog* pd = new(std::cout) dog();

最新文章

  1. 通过实战理解C语言精要——函数篇
  2. 数据库SQLite
  3. sql-schema与catalog
  4. 用C语言画一个“爱心”
  5. PHP 的snmp各个版本的Wrapper封装类
  6. 【linux】linux启动过程
  7. mysql5日期类型datetime查询范围值
  8. Centos7搭建集中式日志系统
  9. django celery的分布式异步之路(一) 起步
  10. linux dig 命令
  11. Ubuntu16.04系统安装搜狗输入法详细教程(转载)
  12. nat 共享上网软件
  13. Origin的使用问题集锦
  14. Entity Framework 学习
  15. 转---CentOS安装Oracle数据库详细介绍及常见问题汇总
  16. iOS - UITabBarController中的坑
  17. SYSBIOS学习笔记---线程(Threads)
  18. Mysql隔离级别 sql示例理解
  19. 【BZOJ2558】Count on a tree
  20. Centos 安装Dokuwiki

热门文章

  1. centos7 firewalld基本使用
  2. 阿里druid数据库连接池配置
  3. webapi core2.1 Identity.EntityFramework Core进行配置和操作数据 (一)没什么用
  4. 实验吧—Web——WP之 猫抓老鼠
  5. spring模拟ioc
  6. map遍历的几种方式和效率问题
  7. Java解析property文件(和静哥说的,SQL执行限定时间写在xml中,增加扩展,在不改源代码基础上)
  8. IO流的序列化和反序列化
  9. RequireJS 学习资料收集
  10. 时间标准基础知识UTC和ISO8601