0

IDE - Visual Studio 2008,Visual C++

  1. 我有一个带有复制构造函数的自定义类Class1 。
  2. 我也有矢量图
  3. 使用以下代码插入数据
 Class1* objClass1;
 vector<Class1> vClass1;

 for(int i=0;i<1000;i++) {

    objClass1 = new Class1();
    vClass1.push_back(*objClass1);
    delete objClass1;

}

现在在每次插入时,向量都会被重新分配,所有现有内容都被复制到新位置。例如,如果向量有 5 个元素,并且如果我插入第 6 个元素,则前 5 个元素和新元素一起被复制到一个新位置(我通过在复制构造函数中添加日志语句来解决这个问题。)

然而,在使用reserve()时,这并没有按预期发生!我有以下问题

  1. 是否必须始终使用储备声明?
  2. 每次我执行push_back时,vector 是否都会重新分配;还是因为我正在调试而发生?
4

2 回答 2

2
  1. 这不是强制性的,它是一种优化,因为重新分配很昂贵。
  2. 我认为这是一个实现细节,它重新分配的频率。我认为向量在每次重新分配时将其存储量翻倍是正常的,但是,正如我所说,这可能因实现而异。(可能是因为您处于调试版本中,所以重新分配的频率比正常情况高。)
于 2010-04-27T19:50:21.860 回答
1

通过将您的复制构造函数测试放入非调试代码中找出答案,并让我们知道您为您的平台获得了什么!IMO 向量不应在每次回推时重新分配。有更聪明的方法来管理内存,我敢打赌实施者没有这样做。

于 2010-04-27T20:22:14.183 回答