重载C++的new和delete

重载C/C++标准库的内存管理函数(比如malloc,free,operator new,operator delete,operator new[],operator delete[])时,编译器会忽视重定义,所以不用担心链接时会产生重定义错误。
operator new,operator delete,operator new[],operator delete[]这些函数如果定义在类中,则默认就是static函数,所以这些函数不能访问非静态的数据成员。
不用担心类的构造函数和析构函数对重载new和delete带来的影响,编译器在调用了内存分配函数后会自动调用类的构造函数。以下是重载new和delete示例:

void* operator new(size_t size)
{
	return malloc(size);
}

void* operator new[](size_t size) 
{
	return malloc(size);
}

void operator delete(void* p)
{
	free(p);
}

void operator delete[](void* p)
{
	free(p);
}

猜你喜欢

转载自blog.csdn.net/csdn_gddf102384398/article/details/88795657