2015-01-16 208 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

相关问题