如果以下是好的或坏的设计,我会每天尝试学习新的东西。
我正在实现一个A
将自身对象缓存在静态私有成员变量中的类std::map<> cache
。的用户A
应该只能访问指向地图中元素的指针,因为完整的副本A
很昂贵且不需要。A
仅当地图中尚不可用时才会创建新的,因为构建A
需要一些繁重的工作。好的,这里有一些代码:
class B;
class A {
public:
static A* get_instance(const B & b, int x) {
int hash = A::hash(b,x);
map<int, A>::iterator found = cache.find(hash);
if(found == cache.end())
found = cache.insert(make_pair(hash, A(b,x))).first;
return &(found->second);
}
static int hash(B & b, int x) {
// unique hash function for combination of b and x
}
// ...
private:
A(B & b, int x) : _b(b), _x(x) {
// do some heavy computation, store plenty of results
// in private members
}
static map<int, A> cache;
B _b;
int _x; // added, so A::hash() makes sense (instead of B::hash())
// ...
};
上面的代码有什么问题吗?是否有任何陷阱,我是否错过了内存管理问题或其他任何问题?
感谢您的反馈意见!