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