假設我有class A 這樣的
class A {
public:int num;
public:A* parent;
A(){};
A::A (const A &s)
{
this->num = s.num;
}
};
在 main 函式中,我從 A 類中創建了兩個物件
int main()
{
A a1;
a1.num = 2;
A a2 = a1;
a2.parent = &a1;
cout << a2.parent->num << endl;
return 0;
}
它顯然會列印 2 但是當我制作 A 類的向量并將 a2 物件推入向量時像這樣
int main()
{
A a1;
a1.num =2;
A a2 = a1;
a2.parent = &a1;
vector <A> List;
List.push_back(a2);
A temp = List.front();
cout << temp.parent->num << endl;
return 0;
}
cmd 正在崩潰并且不列印任何內容。誰能幫幫我。
PS:我不知道在深層復制建構式中將第二個物件分配給第一個物件的父物件的正確方法是什么,這就是我手動分配它的原因。
uj5u.com熱心網友回復:
你的問題在這里:
A::A (const A &s)
{
this->num = s.num;
}
這是一個復制建構式。它被觸發A temp = List.front();
但是,它沒有設定this->parent,它仍未初始化。所以,下一行,當temp.parent->num你訪問未初始化的記憶體時。
您還應該這樣做:(或者按照某些程式員建議的那樣將其完全洗掉)
A::A (const A &s)
{
this->num = s.num;
this->parent = s.parent;
}
但是花點時間看看三的法則。并且知道vectors 會重新分配并可能使某些物件的地址無效。如果您將向量中的一個物件設定為另一個物件的父物件,這將給您帶來麻煩。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/535455.html
標籤:C 班级向量参考
上一篇:將幾個元素從串列移動到向量
