0

我对 std::vector 有疑问

class myType
{
    int i;
};

int main()
{
    myType a1;
    myType a2;
    std::vector<myType> V;
    V.push_back(a1);
    myType* a1ptr = &V.back();
    V.push_back(a2);
}

在我添加 a2 之前一切正常,ptr 指向一些有意义的内存。但是一旦我添加了 a2,ptr 仍然指向同一个地方,但有一些垃圾内存。

这是怎么回事?

4

1 回答 1

0

当您将 a2 添加到向量中时,向量必须调整大小。这意味着新的内存被分配,旧的向量被复制到这个新的(更大的)内存中。然后释放旧内存。您的指针悬在这个(旧的)已释放内存中。

如果你用一个大小构造你的向量,即std::vector V(2),向量将不必调整大小,你的指针将继续指向a1的值。

于 2013-10-04T13:43:46.933 回答