我决定做一个小型的ObjectPool类,供内部使用。你对此有何看法?
template<class T>
class ObjectPool
{
public:
inline T& getObject();
inline void releaseObject(T& obj);
private:
std::stack<std::reference_wrapper<T>> mFree;
std::vector<T> mPool;
};
template<class T>
void ObjectPool<T>::releaseObject(T& obj)
{
mFree.push(obj);
}
template<class T>
T& ObjectPool<T>::getObject()
{
if (mFree.size()) {
T& num = mFree.top();
mFree.pop();
return num;
} else {
mPool.emplace_back();
return mPool.back();
}
}我也想使所有的功能和数据是静态的。这被认为是不好的做法吗?
发布于 2015-02-13 08:28:20
首先,每次mPool调整大小时,免费引用都将失效。这将导致各种未定义的行为。
调整池的大小在性能方面也不是一个好主意。最好有固定大小的块,并在需要时添加更多的块。
这样一个池意味着您的用户不再能够获得RAII的好处,这可能是一个巨大的损失。
关于静态方法的问题。这本身并不是一种糟糕的做法,但您的用户将不再被允许为同一类型使用不同的池。如果您想要创建一个静态方法,您最好有很强的理由这样做。
总的来说,考虑使用containers+allocators而不是池。
https://codereview.stackexchange.com/questions/80376
复制相似问题