C++ 有没有一种方法可以使用引用而不是指针来处理包含彼此数据的类?
问题:两个不同的类是否可以包含彼此的值而不是指针?C++ 有没有一种方法可以使用引用而不是指针来处理包含彼此数据的类?,c++,pointers,reference,C++,Pointers,Reference,问题:两个不同的类是否可以包含彼此的值而不是指针? 我理解,为了让一个类将另一个类作为数据保存在其中,它需要知道代码中存在另一个类。所以这是通过远期申报完成的。前向声明并不意味着它已经被定义,所以为了让类在定义之前持有它,它需要指向它。 我有几种不同的有效方法可以完美地实现这一点,但我最好使用原始指针上的引用,这样我就不必担心指针在将来的代码中会被删除。我在写这个问题时提出了这段代码,它是有效的。我决定发表这个问题,以防将来有人想到同样的事情。我还想看看我的答案/解决方案是否正确 cla
我理解,为了让一个类将另一个类作为数据保存在其中,它需要知道代码中存在另一个类。所以这是通过远期申报完成的。前向声明并不意味着它已经被定义,所以为了让类在定义之前持有它,它需要指向它。
我有几种不同的有效方法可以完美地实现这一点,但我最好使用原始指针上的引用,这样我就不必担心指针在将来的代码中会被删除。我在写这个问题时提出了这段代码,它是有效的。我决定发表这个问题,以防将来有人想到同样的事情。我还想看看我的答案/解决方案是否正确
class child;
class parent{
public:
child &myKid;
std::string name;
parent( child &kid ):myKid(kid){ name = "Dave"; }
};
class child{
public:
parent &adult;
child( parent& vAdult ):adult(vAdult){}
//child( parent* vAdult ):adult(vAdult){ }
};
int main()
{
child jame( *(new parent( jame )) );
parent &Dave = jame.adult;
std::cout<< Dave.name << std::flush;
return 0;
}
类子;
班级家长{
公众:
child&myKid;
std::字符串名;
父母(孩子和孩子):我的孩子(孩子){name=“Dave”;}
};
班童{
公众:
父母与成人;
儿童(父母和瓦杜尔特):成人(瓦杜尔特){}
//儿童(父母*瓦杜尔特):成人(瓦杜尔特){}
};
int main()
{
儿童jame(*(新父母jame));
家长&Dave=jame.成人;
标准::cout@JoeZ我在代码中看到了一个问题。child jame(*(新父(jame)))
意味着jame
中的成人
有一个未定义的对孩子的引用。你的代码中没有任何东西可以释放父
。当子
超出范围时,你泄漏了父
。你可以尝试通过向子
添加一个析构函数来修复它,这会像<代码>删除和成人
,但我认为您无法编写正确的副本或副本分配构造函数,因此您最终违反了规则-3。您必须使您的类不可复制,这相当不方便。@JoeZ我刚刚注意到,在我重新阅读代码并注意到新建
意味着它被放在可用内存中撕开它,它将永远不会被删除。我也看到了你刚才提到的另一个问题。回到绘图板。