10.重载示例(上)
来源:互联网 发布:网络数据库类型有哪些 编辑:程序博客网 时间:2024/06/05 17:35
#include <iostream>#include <stdlib.h>using namespace std;class Foo {public:int _id;long _data;string _str;public:Foo():_id(0) {cout << "default ctor. this=" << this << " id=" << _id << endl; }Foo(int i):_id(i) {cout << "ctor. this=" << this << " id=" << _id << endl; }//non virtual ~Foo() {cout << "dtor. this=" << this << " id=" << _id << endl;}static void* operator new(size_t size);static void operator delete(void* pdead, size_t size);static void* operator new[](size_t size);static void operator delete[](void* pdead, size_t size);};void* Foo::operator new(size_t size){Foo* p = (Foo*)malloc(size);cout << "Foo::operator new(), size= " << size << endl;return p;}void Foo::operator delete(void* pdead, size_t size){cout << "Foo::operator delete(), pdead= " << pdead << " size= " << size << endl;free(pdead);}void* Foo::operator new[](size_t size){Foo* p = (Foo*)malloc(size);cout << "Foo::operator new[](), size= " << size << endl;return p;}void Foo::operator delete[](void* pdead, size_t size){cout << "Foo::operator delete[](), pdead= " << pdead << " size= " << size << endl;free(pdead);}int main() {cout << "sizeof(string) " << sizeof(string) << endl;cout << "sizeof(Foo) " << sizeof(Foo) << endl;Foo* p = new Foo(7);delete p;cout << endl;Foo* pArray = new Foo[5];delete []pArray;cout << "---------------------------------------------------" << endl;p = ::new Foo(7);::delete p;cout << endl; pArray = ::new Foo[5];::delete []pArray;return 0;}
Foo* p = new Foo(7);
delete p;
Foo* pArray = new Foo[5];
delete []pArray; 若无members 就调用 globals
p = ::new Foo(7);
::delete p;
pArray = ::new Foo[5];
::delete []pArray; 这样调用(也就是写上global scope operator::会逃过前面所有overloaded functions强迫使用global version)
都没有进入重载的operator new(),operator delete(),operator new[](),operato[]()
阅读全文
0 0
- 10.重载示例(上)
- 11.重载示例(下)
- dubbo示例(上)
- 【c++程序】重载构造函数(示例)
- 方法重载示例
- C++ 重载示例
- 运算符重载示例
- 运算符重载示例
- 操作符的重载(上)
- 【十】运算符重载(上)
- 【c++】运算符重载(上)
- C++之运算符重载(上)
- 重载、虚函数(覆盖、多态)、隐藏 -- 代码示例
- 【c++程序】成员函数的重载(示例)
- c++超基础:操作符重载下(重载符号:=、[]、==、!=)示例
- 重载new[]和delete[]示例
- C++重载operator的示例
- C++重载operator的示例
- socket网络编程中read与recv区别
- [leetcode]: 172. Factorial Trailing Zeroes
- Uity开发随笔(一)
- C与lua
- 制作initramfs/initrd镜像
- 10.重载示例(上)
- HDU3974-Assign the task(线段树+区间建树)
- CaffeOnSpark安装和使用教程系列二:单节点使用CaffeOnSpark进行MNIST数据集的测试
- c++与lua
- 【C#机房重构】命名空间"Microsoft"中不存在类型或命名空间名称"Office"(是否缺少程序引用?)
- 安装完jdk,重新部署项目启动时,提示找不到jre解决方案
- UVa 11384 Help is needed for Dexter——思路题
- Java8-流-用流收集数据和并行流
- 交换机与路由器