2013-08-16 43 views
0

this相關,我想知道是否有理由使用指向父對象(而不是談論父類)的指針而不是引用。讓子對象有一個對其父對象的引用而不是指針是不好的做法嗎?

顯然,如果父項可以爲null,則引用將不起作用。但是,如果父對象在其生命週期中創建並銷燬子對象,以便子對象的指針返回其父對象將永遠不會爲空?我認爲在這種情況下聽起來沒問題,但我還沒有看到別人這樣做,並且仍然在學習很多關於C++的知識。

我想到的具體情況是一個專門的對話窗口,它只會被某個窗口類創建。

有哪些問題(如果有的話)做

class Child { 
    Child(Parent& parent) : parent_(parent) {} 
    Parent& parent_; 
}; 

class Child { 
    Child(Parent* parent) : parent_(parent) {} 
    Parent* parent_; 
}; 

回答

4

人們會認爲它整天,但引用都只是有限的指針。不要爲使用哪個而苦惱。

指針的優點是您可以複製孩子,或者創建一個沒有父母的孩子,以後再提供。如果你需要這樣做,你必須使用一個指針。

如果不是,請使用哪一個讓你感到最溫暖。這不值得擔心。

如果您製作指針Parent *const parent_它實際上與參考相同。

+2

使用指針時,更改父項也會更容易/更清晰。 –

3

這裏引用和指針之間的一些差異:

參考文獻:

  • 的引用必須在創建時
  • 一旦初始化爲指向一個對象進行初始化,你不能改變的參照指向另一物體

Po半成品:

  • 指針不需要進行初始化,您可以指向NULL
  • 您可以修改您的指針,以指向另一個對象

後果:

因此,根據你想要的孩子和父母之間的關係,你會選擇指針或引用。如果你不需要指針,也更喜歡參考指針。

換句話說,如果子對象在其生命週期中具有相同的父對象,並且在創建子對象時父對象存在:使用引用指向父對象。

相關問題