Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 有没有一种方法可以使用引用而不是指针来处理包含彼此数据的类?_C++_Pointers_Reference - Fatal编程技术网

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我刚刚注意到,在我重新阅读代码并注意到
新建
意味着它被放在可用内存中撕开它,它将永远不会被删除。我也看到了你刚才提到的另一个问题。回到绘图板。