关于虚析构函数的意义以及operator new与operator delete
来源:互联网 发布:淘宝商铺怎么激活 编辑:程序博客网 时间:2024/06/05 00:44
/* * File: main.cpp * Author: Vicky * */#include <cstddef>#include <cstdlib>#include <iostream>class A{public: void* operator new(size_t size) { std::cout << "分配大小:" << size << std::endl;// return ::operator new(size); return malloc(size); } void operator delete(void* p, size_t size) { std::cout << "释放大小:" << size << std::endl;// ::operator delete(p); free(p); } private: char name[20];};class A1 : public A{ public:private: char pswd[20];};// -----------------class B{public: /** 虚析构函数的意义!!! */ virtual ~B(){ } void* operator new(size_t size) { std::cout << "分配大小:" << size << std::endl;// return ::operator new(size); return malloc(size); } void operator delete(void* p, size_t size) { std::cout << "释放大小:" << size << std::endl;// ::operator delete(p); free(p); }private: char name[20];};class B1 : public B{ public:private: char pswd[20];};/* * */int main(void) { A* _a = new A(); delete _a; A1* _a1 = new A1(); delete _a1; std::cout << "---------------------------" << std::endl; A* _a2 = new A1(); // 分配大小为40 delete _a2; // 释放大小却为20 (错误) std::cout << "---------------------------" << std::endl; B* _b1 = new B1(); // 分配大小为44 delete _b1; // 释放大小也为44 (正确) return 0;}
分配大小:20
释放大小:20
分配大小:40
释放大小:40
---------------------------
分配大小:40
释放大小:20
---------------------------
分配大小:44
释放大小:44
运行成功(总计时间: 125毫秒)
理解A* a = new A1();delete a; 编译器无法获得到正确的大小,在释放内存的时候,会安装类型获得大小,解决这个问题就需要使用虚析构函数。
- 关于虚析构函数的意义以及operator new与operator delete
- 关于new/operator new和delete/operator delete的看法
- c++operator new/new operator、operator delete/delete operator的区别与联系
- 类的operator new与operator delete的重载
- 类的operator new与operator delete的重载
- 类的operator new与operator delete的重载
- 类的operator new与operator delete的重载
- 拨开自定义operator new与operator delete的迷雾
- 拨开自定义operator new与operator delete的迷雾
- 拨开自定义operator new与operator delete的迷雾
- 开自定义operator new与operator delete的迷雾
- 拨开自定义operator new与operator delete的迷雾
- 拨开自定义operator new与operator delete的迷雾
- 自定义operator new与operator delete的使用(1)
- 自定义operator new与operator delete的使用(2)
- 拨开自定义operator new与operator delete的迷雾
- 拨开自定义operator new与operator delete的迷雾
- C++ 的 new 和 delete : new operator, operator new, placement new, delete operator, operator delete
- 我的config 配置
- ORACLE-Kill 杀死正在执行的Oracle存储过程和死锁语句
- Jquery UI的日历控件datepicker限制日期
- android--graphics
- 皮肤保养牢记8件小事
- 关于虚析构函数的意义以及operator new与operator delete
- shell 重定向
- 探索ORACLE之RMAN_03一致性备份
- Linux 定时执行 PHP 文件
- linux下C语言多线程编程实例
- 枚举类型
- centOS root密码忘记怎么办?
- 一些iOS高效开源类库
- CF 190C STL