new

#include <iostream>
#include<stdio.h>
#include<malloc.h>
/*class A
{
public:
	A()
	{
		std::cout<<"call A constructor"<<std::endl;
	}

	~A()
	{
		std::cout<<"call A destructor"<<std::endl;
	}
	void* operator new(size_t size)
	{
		std::cout<<"call A::operator new"<<std::endl;
		return malloc(size);
	}

	void* operator new(size_t size, const std::nothrow_t& nothrow_value)
	{
		std::cout<<"call A::operator new nothrow"<<std::endl;
		return malloc(size);
	}
};
void* operator new(size_t size)
{
	std::cout<<"call global operator new"<<std::endl;
	return malloc(size);
}
void* operator new(size_t size,const std::nothrow_t& nothrow_value)
{
	std::cout<<"call global operator  new nothrow"<<std::endl;
	return malloc(size);
}
void operator delete(void *p)
{
    std::cout<<"call global operator  delete "<<std::endl;
    free(p);
}
void operator delete(void *p,int x)
{
    std::cout<<"call global operator  delete "<<std::endl;
    free(p);
}
int main()
{
	A* p1 = new A;
	delete p1;

	A* p2 = new(std::nothrow) A;
	delete p2;

	//system("pause");
	return 0;
}*/

class A
{
public:
	A()
	{
		std::cout<<"call A constructor"<<std::endl;
	}

	~A()
	{
		std::cout<<"call A destructor"<<std::endl;
	}
	void *operator new(size_t size)
	{
	    std::cout<<"call A::operator new size:"<<size<<std::endl;
		return malloc(size);
	}
	void* operator new [](size_t size)
	{
		std::cout<<"call A::operator new[] size:"<<size<<std::endl;
		return malloc(size);
	}
	void operator delete[](void* p)
	{
		std::cout<<"call A::operator delete[]"<<std::endl;
		free(p);
	}
	void operator delete(void* p)
	{
	    std::cout<<"call A::operator delete"<<std::endl;
		free(p);
		free(p);
	}
};
void* operator new [](size_t size)
{
    std::cout<<"call global operator new[] size:"<<size<<std::endl;
    return malloc(size);
}
void operator delete[](void* p)
{
    std::cout<<"call global operator delete[]"<<std::endl;
    free(p);
}
int main()
{
	A* p1 = new A[3];
	delete [] p1;
	return 0;
}

你可能感兴趣的:(new)