我想创建具有如下行为的单例类。
但是如你所知,1& 2& 3是相互冲突的。 在这种情况下,我必须选择其中一个(记忆或表现)
程序可以满足内存和解决方案吗?性能要求?
答案 0 :(得分:0)
"程序可以满足内存和解决方案吗?性能要求?"
无论如何都需要满足这些要求。为了确保单例类的 lazy instantiation ,我建议使用scott meyer的单例实现来保证延迟/线程安全初始化,如here所述:
class Singleton {
public:
static Singleton& Instance() {
static Singleton theInstance;
return theInstance;
}
delete Singleton(const Singleton&);
delete Singleton& operator=(const Singleton&);
private:
Singleton() {}
};
关于内存消耗,您必须以不同方式对其进行优化。我实际上无法告诉您,您可能有可能缩小内存占用空间。到目前为止,您的问题没有提供足够的信息。
"但如你所知,1& 2& 3是相互冲突的。在这种情况下,我必须选择其中一个(记忆或表演)"
我无法看到任何实际的冲突?在第一次访问Singleton::Instance
时可能会出现性能损失,但后续访问不会触发初始化,那又是什么?
答案 1 :(得分:-2)
很难说,因为你没有提供很多细节。你的资源在内存和磁盘上都有限吗?单例类需要时间来初始化,因为它很大,或者因为它必须做很多计算?多长时间了?多大是多少?什么是有限的资源?
如果您有磁盘空间并且读/写磁盘相对较快, 如果您在程序初始化期间可以花一些时间, 你可以创建并将你的类序列化为磁盘(并保留文件 锁定)启动时,如果内存不足,则在需要时从那里读取实例。或者在另一个线程中创建单例并在主线程中执行其他一些操作。