因为编译器差异,使得同样的代码,可能表现不同的行为,这种现象是不期望的,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()
{
}
};
因篇幅问题不能全部显示,请点此查看更多更全内容