代码之家  ›  专栏  ›  技术社区  ›  gct

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

  •  -1
  • gct  · 技术社区  · 7 年前

    所以说我在C++中有一些ABC:

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

    我还有另一个类,我想提供这个接口的一个实例来使用:

    struct Other {
        IRun* runner_;
    };
    

    问题是,我必须将runner_u作为获取虚拟调度的指针(引用是不可分配的,因为它们是不可分配的)。我想在我的使用“现代”,所以跑步者可能属于一个聪明的指针。

    我希望其他的可以复制,而不是共享状态,所以共享的指针和唯一的指针是不可用的。我能看到的唯一选项是编写自己的,通过clone()虚拟函数复制底层对象?标准C++(& lt;= c++ 11)中是否有针对这个用例的东西?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Stack Exchange Supports Israel    7 年前

    这是正确的,没有任何内置的C++来完成这项工作。

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