【发布时间】:2022-11-17 00:25:57
【问题描述】:
假设我有这样的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:我不知道在深层复制构造函数中将第二个对象分配给第一个对象的父对象的正确方法是什么,这就是我手动分配它的原因。
【问题讨论】:
-
您的
A复制构造函数仅复制num,它不会复制或以其他方式初始化parent成员变量。所以temp.parent将被取消初始化不定值,导致未定义的行为当您取消引用指针时。 -
此特定示例的简单解决方法:删除复制构造函数。
标签: c++ class vector cmd reference