配套环境
clion + g++
设计目的
当代软件架构实践中的经验
(1). 尽量使用单重继承的方式进行系统设计
(2). 尽量保持系统之只存在单一的继承树
(3). 尽量使用组合关系替代继承关系
设计方案
遵循经典设计准则,所有数据结构都继承自Object类
定义动态内存申请行为,提高代码的移植性(避免不同编译器对于动态内存申请失败返回结果不同的处理)
实现代码
Object.h
#ifndef OBJECT_H
#define OBJECT_H
#include <iostream>
// Object
namespace DTLib {
class Object {
public:
void *operator new(std::size_t) throw();
void operator delete(void *p);
void *operator new[](std::size_t) throw();
void operator delete[](void *p);
virtual ~Object() = 0;
};
} // namespace DTLib
#endif //TEST_OBJECT_H
Object.cpp
#include "Object.h"
#include <cstdlib>
#include <iostream>
using namespace std;
namespace DTLib {
void *Object::operator new(std::size_t size) throw() {
cout << "Object::operator new" << size << endl;
return malloc(size);
}
void Object::operator delete(void *p) {
cout << "Object::operator delete" << p << endl;
free(p);
}
void *Object::operator new[](std::size_t size) throw() {
return malloc(size);
}
void Object::operator delete[](void *p) {
free(p);
}
Object::~Object() {
}
} // namespace DTLib
小结
Object类是DTLib种数据结构类的顶层父类
Object类用于统一动态内存申请的行为
在堆中创建Object子类的对象,失败时返回NULL值
Object类为纯虚父类,所有子类都能进行动态类型识别
喝水不忘挖井人: 更多内容请搜索狄泰软件学院(淘宝/B站)