搜索
您的当前位置:首页正文

顶层父类Object

来源:好走旅游网

因为编译器差异,使得同样的代码,可能表现不同的行为,这种现象是不期望的,So 创建顶层父类,将可能表现不同行为的代码,加以避免,提高代码的可移植性

new在不同编译器的行为不同,当申请失败时,可能会返回NULL,也可能扔出异常
解决方案:重载new,使用C库的malloc实现,如果失败,只返回NULL,不抛异常
     相应的delete也需要重载(用free实现)

顶层父类的接口定义:

class Object//抽象类
{
public:
	void* operator new(unsigned int size) throw();//接口注明,表明该函数不抛异常
	void operator delete(void* p);
	void* operator new[](unsigned int size) throw();
	void operator delete[](void* p);
	bool operator ==(const Object& e)const;
	bool operator !=(const Object& e)const;
	virtual ~Object()=0;//纯虚函数
};

顶层父类的具体实现:

#include "Object.h"
#include <cstdlib>
#include <iostream>

using namespace std;


namespace JYlib
{

/* new内置了一个sizeof,自动转化为size_t的类型 32位为u int,64位为u long */
void* Object::operator new(unsigned int size) throw()
{
	return malloc(size);
}

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

void* Object::operator new[](unsigned int size) throw()
{
	return malloc(size);
}

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

bool Object::operator ==(const Object& e)const
{
	return (this == &e);
}

bool Object::operator !=(const Object& e)const
{
	return (this != &e);
}

Object::~Object()
{

}

};

因篇幅问题不能全部显示,请点此查看更多更全内容

Top