用C++替换内存管理器的单例解决方案
Replacing a singleton solution for a memory manager in C++
我的项目中有两个用于管理内存的类:MemoryStorage
和MemoryFile
。
第一个类似于HDD,通过使用singleton(添加、删除、释放等)来保持MemoryFiles
(文件、目录等)。第二个类似于fstream
,但用于内存(打开、关闭、写入、读取等)
使用示例
MemoryFile file(&MemoryStorage);
// Open file in write mode
if (file.open("filename", open_mode::out)) {
// Data file
int* obj = new int;
*obj = 0;
// Write in internal buff
file.write(obj, sizeof(int));
delete obj;
// Put buff in MemoryStorage and clear buff
file.close();
}
// Other moment
// Open file in read mode
if (file.open("filename", open_mode::in)) {
// Data file
int* obj = new int;
// Write in internal buff
file.read(obj, sizeof(int));
cout << *obj << endl; // Print: 0
delete obj;
// Put buff in MemoryStorage and clear buff
file.close();
}
如果我不使用singleton,那么在内存中创建具有相同名称的文件是可能的,这会导致文件系统不一致。
我读过几篇关于堆栈溢出的文章,比如这篇文章,这些文章讨论了许多程序员认为singleton是一种糟糕的模式。
否则,如果没有单例模式,我该如何解决上面的编程问题?我是否在MemoryStorage
中使用一个私有静态成员来复制singleton的效果?
无论您的用例如何,如果您绝对确定所代表的对象在现实世界中只有一个实例,例如内存管理器,那么使用singleton肯定是一个合理的选择。
singleton的问题是,它并不像看上去的那样简单。举几个你将要面对的问题——关于多线程环境,你能绝对保证不会创建两个singleton吗?单身汉的毁灭呢?那么继承,或者有更多的单身汉呢?
我建议,如果您觉得单例是一种可行的方法,请尝试一下,但在开始实现之前,请注意您可能需要解决的所有问题。
YATAS!关于单身汉的另一条线索。只有当它们代表以单数形式自然存在的东西时,才应该使用单数,只用于您正在执行的过程。像FILESYSTEM、LOG等
同时,如果你有真正的理由,不要回避单身人士。不要听纯粹主义者的话,除了"代码样本",他们几乎不写任何真正的代码。
相关文章:
- 运行同一解决方案的另一个项目的项目
- Project Euler问题4的错误解决方案
- 计算每个节点的树高,帮助我解释这个代码解决方案
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- visual c++,如何获取解决方案目录中的代码
- 为什么在单例中,检查类==空?
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- C++Matching Brackets 2解决方案不起作用
- 在 ubuntu3 上C++ goto 定义有什么解决方案吗16.04?
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- C++ 实现模板单例类时出现链接错误
- 在类中存储单例的指针
- 我的固定时间步长与增量时间和插值的解决方案是错误的吗?
- C++回文检查解决方案被一个测试用例跳闸
- 单例中未解决的外部符号
- 我提交了解决方案,并在第 4 个测试用例中出现时间限制错误
- C++ 单例设计模式替代方案
- 用C++替换内存管理器的单例解决方案
- 单例方案,使用不同的参数重载 getInstance
- 如何解决 C2248:无法访问在单例类中声明的私有成员