从 Vector 的元素成员方法插入矢量元素会破坏 *this



有人可以解释为什么这个C++代码它的行为是这样的吗?和。。将来如何避免这种"矢量"问题。

#include <iostream>
#include <vector>
using namespace std;
struct my_str {
    int x;
    my_str() {
        x = 0;
    }
    void insert();
};
vector<my_str> p;
void my_str :: insert() {
    p.push_back(my_str());
    x = 123;
}
int main() {
    p.push_back(my_str());
    p[0].insert();
    cerr << p[0].x;
    return 0;
}

p.push_back(my_str()); void my_str :: insert()

导致向量重分配,this无效

x = 123;

繁荣!堆损坏。

为避免将来出现此类问题,请不要从它们包含的对象编辑矢量。或者,如果必须这样做,请确保在此之后不要使用对象成员。

最新更新