向量的push_back调用对象的析构

问题描述 投票:1回答:1

类似的问题已经在这里问了很多次,下面的答案并不虽然解决我的问题。

比方说,我有:

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 ::向量在这种情况下,一个好主意呢?

c++ vector destructor
1个回答
4
投票

std::vector扩展其存储它的副本或当前对象移动到新的存储空间。旧物都扔掉了,那本质上涉及呼吁旧对象的析构函数。

如果摧毁旧的对象是不可取的,std::deque或多或少都有相同的操作std::vector,有几分更多的开销,但不必重新分配存储。

如果内存使用量不是问题,std::list从不移动其存储的对象,但在列表中的每个元素都有一对指针,一个指向列表中的前一个元素,以及一个指向下一个元素。

© www.soinside.com 2019 - 2024. All rights reserved.