如何保存指向抽象基类的指针/引用,但在 c++ 中仍然可以复制

How to hold a pointer/reference to abstract base class but still be copyable in c++

本文关键字:c++ 但在 引用 复制 指针 保存 何保存 基类 抽象      更新时间:2023-10-16

假设我在C++中有一些ABC:

struct IRun {
virtual ~IRun() {}
virtual void run() =0;
};

我还有另一个类,我希望为它提供此接口的实例:

struct Other {
IRun* runner_;
};

问题是我必须将runner_作为指针来获取虚拟调度(引用已导出,因为它们不可分配(。 我想在我的用法中变得"现代",所以runner_可能属于一个聪明的指针。

我希望其他是可复制的并且不共享状态,所以shared_ptr和unique_ptr都出来了。 我能看到的唯一选择是编写我自己的,通过 clone(( 虚拟函数复制底层对象? 标准C++ (<= C++11( 中是否有适用于此用例的内容?

这是正确的,C++中没有任何内置功能可以执行此操作。

您必须创建一个创建副本的clone()虚函数,并在IRun的每个子类中实现它。

相关文章: