因为编译器差异,使得同样的代码,可能表现不同的行为,这种现象是不期望的,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()
{
}
};
404

被折叠的 条评论
为什么被折叠?



