我的目标是创建一个包含许多预先准备好的向量(我之前没有两个数据成员,但我想在连续内存中尽可能多地分配)我的对象实例在连续内存中然后来在我的程序中,我可以快速使用其中一个准备好的“shell”来更快地实例化我的对象。最重要的是,所有这些对象都将位于相同的连续内存地址中。
为了达到上述目的,我做到了这一点:
vector<MyClass*>* v = new vector<MyClass>();
v.reserve(10000);
//Later on....
// I want to create my object in the continuous memory I "reserved"
// and have a variable name to it:
v->push_back(MyClass m(10,20));
process(m);
但我不能让它在编译时仍然在对象上有一个变量名....这里是MyClass:
class MyClass{
public:
MyClass();
MyClass(int a, int b);
MyClass(const MyClass& m);
int a;
int b;
private:
//Made above example simpler by putting everything public
}
答案 0 :(得分:0)
我做对象池,但我不会尝试在连续的内存中分配它们,因为这不是关于内存缓存,而是关于最小化对new
和delete
的调用。
我将对象保留在一个空闲列表中。
当我不再需要一个时,我将它推入免费列表中。
然后,当我需要一个时,我只是从免费列表中弹出一个。
如果自由列表为空,那就是我new
新的。