C++ 向量内类的成员函数,在向量重新定位时处于活动状态

C++ 向量内类的成员函数,在向量重新定位时处于活动状态,c++,vector,undefined-behavior,allocation,C++,Vector,Undefined Behavior,Allocation,这个问题可能涉及一个严重的问题。我正在寻找一个解释和解决这个问题 最后,我和我的团队遇到了一个奇怪的(但可以解释的)问题,我们在网上找不到任何类似的问题,我们希望得到一些答案 我们理解向量的再分配问题(在大小变化中)。然而,我们无法理解为什么每当发生此更改时,“this”指针不会自动更新 有没有办法将“this”指针更新到正确的地址 解决以下问题的最佳和最通用的方法是什么(我们的建议可以在本文末尾找到,但我们正在寻找更优雅/通用的方法) 本案: 我们有一个类[TesrClass]和这个类的向量容

这个问题可能涉及一个严重的问题。我正在寻找一个解释和解决这个问题

最后,我和我的团队遇到了一个奇怪的(但可以解释的)问题,我们在网上找不到任何类似的问题,我们希望得到一些答案

  • 我们理解向量的再分配问题(在大小变化中)。然而,我们无法理解为什么每当发生此更改时,“this”指针不会自动更新
  • 有没有办法将“this”指针更新到正确的地址
  • 解决以下问题的最佳和最通用的方法是什么(我们的建议可以在本文末尾找到,但我们正在寻找更优雅/通用的方法)
  • 本案: 我们有一个类[TesrClass]和这个类的向量容器。TestClass函数之一,导致向量容器重新分配(在推送/放置过程中),并在之后继续执行一些后续步骤,这些步骤使用类成员变量/函数[UB?]

    问题是: 重新分配后,“this”对象在此成员函数[Haleluja]中不再有效。这是预期的行为吗?[使用g++&clang-ubuntu16.04进行测试]

    代码演示:
    #包括
    #包括
    #包括
    使用名称空间std;
    类TestContainer;
    类TestClass{
    公众:
    TestClass(int n,TestContainer*tcontainer){
    num=n;
    容器=t容器;
    }
    void func();
    私人:
    int-num;
    TestContainer*容器;
    void类_成员_函数();
    };
    类TestContainer{
    公众:
    向量tc_-vec;
    };
    void TestClass::class_成员_函数(){
    
    难道没有更新
    这个
    指针这样的事情吗?一个对象的地址在任何情况下都不会改变,所以
    这个
    的值也永远不会改变。当一个向量重新分配时,它的元素值会被转移或复制到该对象的一个全新实例中,而上一个实例会被销毁。这是相同的场景rio就好像你在它的成员中有一个动态分配的对象
    删除这个;
    ,然后试图继续使用它。@我猜是这样的,但我不明白如果我根本不使用指针,它是如何变成动态分配的。这个问题难道没有某种防御措施吗?仅仅因为向量的大小和inv验证指向其元素的指针/迭代器并不意味着向量对象本身在内存中移动。向量动态定位其成员,但从不移动自身。
    这是常量。
    向量是一个简单的对象,基本上只包含一个计数和指向动态分配对象的指针(过于简单,但足够好)。标准容器使用默认的分配器,动态分配用于存储元素的存储。如果您在
    std::vector
    中放置了一些内容,除非您碰巧提供了一个行为不同的分配器,否则该值将驻留在动态分配的内存中。@JesperJuhl您能再解释一下吗?我不确定我明白。你所说的“
    这个
    是常数”是什么意思?