2013-12-08 18 views
0

问题:两个不同的类可以包含对方的值而不需要指针吗?

据我所知,为了让一个类在其内部保存另一个类作为数据,它需要知道另一个类存在于代码中。所以这是通过前向声明完成的。前向声明并不意味着它已经被定义,所以为了让类在它被定义之前保持它,它需要指向它。

我有几个不同的有效方式来完成这个完美的,但我最好使用原生指针的引用,所以我不会担心指针被删除某些地方在未来的代码。有没有办法使用引用,而不是指向包含彼此数据的类的指针?

回答

0

我在写这个问题时想出了这段代码,它工作正常。我决定发布这个问题,以防将来任何人想到同样的事情。我也想看看我的答案/解决方案是否合适。

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; 
} 
+1

这似乎是一个巨大的潜在内存泄漏,虽然... –

+1

@JoeZ我看到代码中的问题。 “小孩jame(*(新父母(jame)))''意味着'jame'中的'adult'具有未定义的对小孩的引用。 – Andrew

+0

代码中没有任何东西可以释放“父”。当“孩子”超出范围时,你已经泄露了“父母”。你可以尝试通过向'child'添加一个析构函数来解决这个问题,但是我不认为你可以编写正确的副本或复制指派构造函数,所以最终违反了Rule-of -3。你将不得不让你的课不可复制,这是相当不方便的。 –

相关问题