可能重复:
使用虚拟构造函数的位置?
为什么我们需要在C++中使用虚拟构造函数?
虽然C++不直接支持它.有几种解决方案可以实现此功能.我想知道,当我们需要这样的事情时.
虚拟构造函数是克隆对象的能力,而不知道它是什么类型.当我们不知道对象的真实类型但需要它的副本时,这非常有用.假设我们有一个基类:
class Object
{
public:
Object() {};
virtual ~Object(){} = 0;
virtual Object* clone() const = 0;
};
Run Code Online (Sandbox Code Playgroud)
我们从中得到了很多东西:
class MyClass : public Object
{
public:
MyClass() {};
MyClass(const MyClass& rhs) {}; // copy-constructor
virtual ~MyClass() { };
virtual MyClass* clone() const { return new MyClass(*this); }; // virtual ctor
};
class AnotherClass : public Object { /* etc */ };
Run Code Online (Sandbox Code Playgroud)
现在,假设我们有一个这些Object派生类的向量:
std::vector<Object*> objects;
objects.push_back(new MyClass());
objects.push_back(new AnotherClass());
Run Code Online (Sandbox Code Playgroud)
好的,现在我想复制该向量中的所有对象并将它们放在另一个对象中.这是我们的克隆进来的地方!
std::vector<Object*> anotherVector;
for(std::vector<Object*>::const_iterator cit(objects.begin());
cit != objects.end();
++cit)
anotherVector.push_back((*cit)->clone());
Run Code Online (Sandbox Code Playgroud)
因此,无需知道Object派生类的实际类型,我们可以通过clone()函数创建它们的副本,该函数基本上只调用它自己的copy-constructor.
注意:这只是使用虚拟构造函数的一种可能用法.还有很多其他时候你可能想复制一些东西而不知道它的实际课程.