C ++标准库中是否有纯虚函数?

时间:2016-01-26 23:38:11

标签: c++ language-lawyer

this讲座中,发言者提到(开头)标准库中没有纯虚函数(或者他不知道任何内容)。我相信Alex Stepanov反对这种语言功能但是从最初的STL设计开始,是否有任何纯粹的虚拟内容进入标准库?

FWIW(如果我错了,请纠正我)唯一指针中的删除器最终在大多数实现中使用虚拟调度,但这些不是纯虚拟。

2 个答案:

答案 0 :(得分:54)

[syserr.errcat.overview] std::error_category

class error_category {
  virtual const char* name() const noexcept = 0;
  virtual string message(int ev) const = 0;
};

C ++ 14中没有其他内容。

答案 1 :(得分:4)

从C ++ 17开始,我们有了 [mem.res.class] ,其中的std::pmr::memory_resource具有以下private个纯虚函数:

class memory_resource {
private:
  virtual void* do_allocate(size_t bytes, size_t alignment) = 0;
  virtual void do_deallocate(void* p, size_t bytes, size_t alignment) = 0;
  virtual bool do_is_equal(const memory_resource& other) const noexcept = 0;
};