您好我在C ++中有以下类层次结构
Class1 {
vector<Class2> vecClass2;
}
Class2 {
private:
const Class1 * ptrClass1;
vector<Class3> vecClass3;
public:
Class2(const Class1 * ptrClass1);
int intC2publicVar;
string strC2publicVar;
}
Class3 {
private:
const Class2 * ptrClass2;
vector<Class4> vecClass4;
public:
Class3(const Class2 * ptrClass2);
}
Class4 {
private:
const Class3 * ptrClass3;
vector<Class5> vecClass5;
public:
Class4(const Class3 * ptrClass3);
void class4Method() const;
}
在class4Method()中,我正在做这样的事情:
void Class4::class4Method() const {
const Class2 * pC2 = ptrClass3->ptrClass2;
int valClass2 = pC2->intC2publicVar;
//Above value is giving wrong value, I have no idea from where it is fetching the wrong value
string strVatClass2 = pC2->strC2publicVar;
//Above line of code cause run time termination of code and programs stops as soon as this line executes.
const Class2 c2 = * pC2;
//Above line of code cause run time termination of code and programs stops as soon as this line executes.
}
我不知道为什么会在Class4的class4Method()中发生这种情况。请帮我解决这个问题。由于这个问题,我的整个项目都被打动了,如果不解决它,我就无法继续前进。
答案 0 :(得分:2)
我是否正确地假设const Class
N-1 * ptrClass
N-1 成员指向当前实例的“所有者”并且他们指向的实例位于Class
N-2 的向量中?
在这种情况下,您只是忘记了向量具有在内存中移动内容的习惯,因为它们会重新分配以适应新插入的值。不要将指针存储到向量中的对象,而是将对象存储在列表中(并将指针指向列表中的实例,因为它仍然被复制)或存储指针向量(并确保删除析构函数中的元素)。 / p>