类似的问题已经在这里问了很多次,下面的答案并不虽然解决我的问题。
比方说,我有:
1)两个类(ACLASS和BClass)
2)一类具有一个构造函数和析构函数
3)B类具有存储一类的对象一个std ::矢量构件
4)在矢量元素的数量是未知的预先
5)每当BClass方法generateObject()被调用,如创建一个新对象ACLASS矢量膨胀。这是通过调用的std :: vector.push_back()完成。
class AClass {
AClass() { //Constructor }
~AClass() { //Destructor }
};
Class BClass {
std::vector<AClass> object;
void generateObject() {
object.push_back(AClass());
}
};
现在,在上面的例子中,generateObject()将只几次。一旦载体变得太小,无法容纳所有的物体,它为了保留更多的内存能够扩展执行各种内部操作。问题是,一些(如果不是全部)ACLASS析构函数的过程中调用。
由于元件的数量是未知的,通过使用储备()保留用于向量更多的空间是不是一个选项。使用emplace_back()并没有解决我的问题也是如此。
所以,我怎么去呢?有没有一种方法,以防止析构函数被调用?正在使用的std ::向量在这种情况下,一个好主意呢?
当std::vector
扩展其存储它的副本或当前对象移动到新的存储空间。旧物都扔掉了,那本质上涉及呼吁旧对象的析构函数。
如果摧毁旧的对象是不可取的,std::deque
或多或少都有相同的操作std::vector
,有几分更多的开销,但不必重新分配存储。
如果内存使用量不是问题,std::list
从不移动其存储的对象,但在列表中的每个元素都有一对指针,一个指向列表中的前一个元素,以及一个指向下一个元素。