C++ 为什么克隆方法总是返回指针?

C++ 为什么克隆方法总是返回指针?,c++,C++,我正在读一些克隆C++实现,它似乎总是定义为 Clonable* clone(); 我想知道为什么总是返回指针;我可以定义克隆以返回可克隆对象吗 我可以定义一个克隆来返回一个Clonable对象吗 当然。见鬼,你可以创建一个clone()方法来返回你想要的任何东西。我的猜测是Clonable类旨在以多态方式使用,clone()方法是virtual。指针(或引用)是C++中运行时多态性的唯一选择。如果它没有返回指针,您会得到。看不到上下文是粗糙的,但我的水晶球告诉我Clonable是虚拟层次结构

我正在读一些克隆C++实现,它似乎总是定义为

Clonable* clone();
我想知道为什么总是返回指针;我可以定义克隆以返回可克隆对象吗

我可以定义一个克隆来返回一个
Clonable
对象吗


当然。见鬼,你可以创建一个
clone()
方法来返回你想要的任何东西。我的猜测是
Clonable
类旨在以多态方式使用,
clone()
方法是
virtual
。指针(或引用)是C++中运行时多态性的唯一选择。如果它没有返回指针,您会得到。

看不到上下文是粗糙的,但我的水晶球告诉我
Clonable
是虚拟层次结构中的一个接口。值得注意的是,一个体面的可克隆模式的现代实现将返回一个
std::unique_ptr
,而不是一个原始指针。@cdhowie:使用协变返回类型就不那么容易了:(…@Jarod42当然是……为什么不是?@cdhowie:我的意思是
std::unique_ptr clone()const override
:(.您必须权衡:
std::unique_ptr clone()const override
派生的*clone()const override
。类型转换如何?客户端代码是否需要类似于
auto widget=static_cast(dynamic_cast(original->clone())
?如果不进行任何强制转换,用户只需返回一个
Clonable*
。但是,如果您想要派生类型,则只需要进行一次强制转换。您不需要像该示例中那样进行双重强制转换。