【问题标题】:Vector push back a derived smart pointer into a vector of smart pointers of a base abstract class向量将派生的智能指针推回基本抽象类的智能指针向量中
【发布时间】:2021-09-20 14:04:18
【问题描述】:

假设我有以下基本抽象类

class Worker {
    public:
      struct Details {
           std::string name;
      };
    public:
      virtual void work() = 0;

};
class Manager {
    public: 
      virtual ~Manager() = default;
      virtual void hire(Worker::Details details) = 0;
      virtual void fire(const Worker & worker) = 0;
};

然后我实现了这两个抽象类:

class DerivedWorker : Worker {
    public:
      DerivedWorker(Worker::Details details) : details(details) {}
      
      void work() override {}
    private:
      Worker::Details details;
};
class Derived : Manager {
    public:
      Derived() {}
      void hire(Worker::Details details) override {
          workers.push_back(std::make_unique<DerivedWorker>(details));
      }
      void fire(const Worker & worker) override {}
    private:
      std::vector<std::unique_ptr<Worker>> workers;
};

为什么workers.push_back(std::make_unique&lt;DerivedWorker&gt;(details) 会抛出编译器error: no matching member function for call to 'push_back' 异常?

同样,你会如何处理workers.emplace_back(...)?

【问题讨论】:

    标签: c++ inheritance vector unique-ptr push-back


    【解决方案1】:

    push_back 不起作用,因为您忘记公开继承。

    emplace_back 可能是同样的问题,尽管您永远不应该将 emplace_back 用于智能指针向量。

    【讨论】:

    • 这是正确的!谢谢你,为我的疏忽道歉。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 2017-03-16
    • 2019-12-05
    • 2016-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多