C++ 内存分配(new,operator new)面面观 (三)

2014-11-23 23:33:58 · 作者: · 浏览: 28
一个int大小。测试代码如下


[cpp]
//A.h
class A
{
public:
A()
{
std::cout<<"call A constructor"< }

~A()
{
std::cout<<"call A destructor"< }

void* operator new(size_t size)
{
std::cout<<"call A::operator new[] size:"< return malloc(size);
}
void operator delete[](void* p)
{
std::cout<<"call A::operator delete[]"< free(p);
}
void operator delete(void* p)
{
free(p);
}
};

//A.h
class A
{
public:
A()
{
std::cout<<"call A constructor"< }

~A()
{
std::cout<<"call A destructor"< }

void* operator new(size_t size)
{
std::cout<<"call A::operator new[] size:"< return malloc(size);
}
void operator delete[](void* p)
{
std::cout<<"call A::operator delete[]"< free(p);
}
void operator delete(void* p)
{
free(p);
}
};[cpp]
//Test.cpp
#include
#include "A.h"

void* operator new[](size_t size)
{
std::cout<<"call global new[] size: "< return malloc(size);
}

void operator delete[](void* p)
{
std::cout<<"call global delete[] "< }
int _tmain(int argc, _TCHAR* argv[])
{
std::cout<<"sizeof A "< A* p1 = new A[3];
delete []p1;

system("pause");
return 0;
}