我的项目中有两个用于管理内存的类:MemoryStorage
和MemoryFile
。
第一个与HDD类似,通过使用单例(添加,删除,释放等)保留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();
}
如果我不使用单例,则可以在内存中创建具有相同名称的文件,从而导致文件系统不一致。
我已经阅读了像this one这样的堆栈溢出中的几篇文章,这些文章讨论了单身人士如何根据许多程序员的不良模式。
如果没有单例模式,我还能如何解决上面的编程问题?
我是否在MemoryStorage
中使用私有静态成员来复制单例的效果?
答案 0 :(得分:0)
无论您的用例如何,如果您完全确定,您所代表的对象在现实世界中只有一个实例,例如memomy manager,使用singleton肯定是一个合理的选择。
单身人士的问题是,它不像看起来那样简单。举几个问题,您将面临一些问题 - 多线程环境怎么样,您能绝对保证不会创建两个单身人士吗?那些单身人士的破坏呢?继承或拥有更多单身人士怎么样?
我建议,如果您觉得单身是一种方法,请尝试一下,但要注意在开始实施之前可能需要解决的所有问题。
答案 1 :(得分:-1)
YATAS!关于单身人士的另一个主题。 单身人士只有在代表某些事物时才会被使用,这些事物本身只是为了你正在执行的过程而以单数形式存在。像FILESYSTEM,LOG等
同时如果你有真实的案例,不要避免单身人士。不要向纯粹主义者倾听,除了&#34;代码样本&#34;之外,他们几乎不会写任何真正的代码。