2015-01-16 207 views
2

我讀一些克隆C++實現,似乎總是定義爲爲什麼克隆方法總是返回一個指針?

Clonable* clone(); 

我很奇怪,爲什麼總是返回一個指針;我可以定義一個克隆來返回一個Clonable對象嗎?

+1

沒有看到上下文很粗糙,但我的水晶球告訴我Clonable是虛擬層次結構中的一個接口。 [一個實例會**切片**](http://stackoverflow.com/questions/274626/what-is-object-slicing) – WhozCraig

+1

值得注意的是,可克隆模式的體面*現代*實現將返回'std :: unique_ptr'而不是原始指針。 – cdhowie

+0

@cdhowie:不那麼容易covariant返回類型:(... – Jarod42

回答

8

我可以定義一個克隆來返回Clonable對象嗎?

當然。哎呀,你可以做一個clone()方法,返回你想要的任何東西。我的猜測是Clonable類意味着多態使用,並且clone()方法是virtual。指針(或引用)是您在C++中運行時多態性的唯一選項。如果它沒有返回指針,你會得到object slicing

+0

什麼是類型轉換?客戶端代碼是否需要像'auto widget = static_cast (dynamic_cast (original-> clone()))? –

+0

沒有任何投射,用戶只會得到一個'Clonable *'回來。但是,如果你想要派生類型,只需要一次強制轉換。你不應該像這個例子那樣需要重複投射東西。 – Cornstalks

相關問題