[英]How to assign a pointer to object to another pointer to object of same class?
[英]Class with pointer to object of the same class
我正在尝试使用指向配偶(Person对象)和子表(Person对象)的指针创建类Person。 这个类实现了婚姻(operator + =),离婚(方法)和创建新的子(operator ++):
class Person{
private:
char* name;
int sex;
Person* spouse;
Person* children[5];
public:
Person();
Person(const Person&);
Person & operator =(const Person&);
Person & operator +=(Person&);//marriage
Person & operator ++();//new children
void divorce();//divorce
Person::~Person();
}
我创建了析构函数,只要没有配偶就会删除子节点:
Person::~Person(){
if (name !=NULL)
delete [] name;
name=NULL;
if (spouse!=NULL)
spouse->spouse =NULL;
else{
for (int i=0; i<5;i++){
if (children[i]!=NULL)
delete children[i];
children[i]=NULL;
}
}
}
我不知道我的拷贝构造函数和operator =是否应该创建配偶和子代的另一个实例。 我试图这样做,但我是无限参考堆栈。 是否可以使用正确分配的配偶和子女创建Person对象的副本?
在此先感谢Elkhunter的任何意见和建议
我认为你的设计错误。 班级Person
最好只有一个明确的责任。 现在,它代表了至少两个独立的概念 - 一个人和一个家庭 。 考虑将这两个概念分成不同的类型 - 它应该更容易实现它。
你的问题是你试图以递归方式处理交织在一起的关系。 当一个丈夫有一个妻子,并且两个都删除了另一个,你当然会陷入递归地狱。
相反,将引用保留为指针,并且不要在析构函数中删除任何引用 - 它根本不是类的责任。 想象一下,当一个真正的丈夫去世时,他的妻子也会自动死亡吗?
只需保留一个单独的Person
实例的std::vector
作为“世界”中Person
的“主目录 ”,让他们通过他们的关系懒洋洋地互相参考。 将所有删除的痛苦放在一个非常非递归的地方,并解决所有问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.