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

Lor*_*ins 32 c++ virtual-functions pure-virtual c++-standard-library language-lawyer

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

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

Igo*_*nik 55

[syserr.errcat.overview]std::error_category

class error_category {
  virtual const char* name() const noexcept = 0;
  virtual string message(int ev) const = 0;
};
Run Code Online (Sandbox Code Playgroud)

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

  • @Nemo从第17章开始搜索标准的文本,为`= 0`.每次击中都有眼球(没有那么多).拖延做实际工作的充分理由. (20认同)
  • 请注意,`std :: function`的典型实现将使用纯虚函数作为实现细节(或者,使用C风格的OO重现等效函数).对于未来和其他运行时概念/类型擦除类型可能也是如此. (6认同)
  • 您如何确定没有其他人?只是好奇。(PS +1) (2认同)
  • @Mehrdad我看不到它如何导致符合要求的程序停止工作。但是,这将允许接受不合格的程序-该程序具有从`std :: error_category`派生的类,该类无法覆盖这些方法之一。在执行方面,这本身可以被认为是不符合要求的-事实是接受了无效程序而没有诊断。 (2认同)

P.W*_*P.W 7

C ++ 17将std::pmr::memory_resource[mem.res.class]一个在C ++ 14,具有以下private纯虚函数:

class memory_resource {
    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;
};
Run Code Online (Sandbox Code Playgroud)

是的,私有虚拟功能可以被覆盖