我正在编写一个对性能要求很高的代码,我需要以多态方式处理大量的对象.假设我有一个A类和一个派生自A的B类.现在我可以创建一个像这样的B:的向量
vector<A*> a(n); for(int i = 0; i < n; i++) a[i] = new B();
但是如果n大(在我的情况下为10 ^ 6或更多),这将需要非常多的对新的调用,而且n个对象可能会遍布我的主内存,导致非常差的缓存性能.处理这种情况的正确方法是什么?我正在考虑做一些像下面这样的事情,让所有的对象都在一个连续的内存区域.
B* b = new B[n]; vector<A*> a(n); for(int i = 0; i < n; i++) a[i] = b + i;
但是一个问题是如果b不再可用(但是我们还有一个),如何释放新的B [n]分配的内存.我刚刚学到了尝试
delete[] a[0];
不是一个好主意…