顶层父类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()
{

}

};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值