在this讲座中,发言者提到(开头)标准库中没有纯虚函数(或者他不知道任何内容)。我相信Alex Stepanov反对这种语言功能但是从最初的STL设计开始,是否有任何纯粹的虚拟内容进入标准库?
FWIW(如果我错了,请纠正我)唯一指针中的删除器最终在大多数实现中使用虚拟调度,但这些不是纯虚拟。
答案 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;
};