【发布时间】:2016-05-03 17:47:00
【问题描述】:
在Nicola Gigante's lecture in 2015 中,他提到(在开头)标准库中没有纯虚函数(或者他不知道)。我相信 Alex Stepanov 反对这种语言特性,但是自从最初的 STL 设计以来,有没有任何纯虚函数潜入标准库?
FWIW(如果我错了,请纠正我)唯一指针中的删除器最终在大多数实现中使用虚拟调度,但这些不是纯虚拟。
【问题讨论】:
-
您是指整个标准库还是只是
STL(迭代器、算法和容器)部分? -
我不知道标准库中有任何纯虚函数。
unique_ptr的默认删除器是非常非虚拟的,因此如果您转换为非多态基类,则不安全。另一方面,shared_ptr使用原始指针保留一个类型擦除的删除器函数,因此这样是安全的。 -
我没有听过讲座,但它似乎是关于泛型编程和
STL。我怀疑重点是,在STL中实现的C++通用编程 与面向对象编程 中可能被认为的典型方法完全正交. -
STL != 标准库
-
@LorahAttkins:不,不是。仅举几个既不是源自 C 也不是 STL 一部分的部分:整个
、 std::string、std::complex、异常。现在std::string和std::complex通常对于使用虚函数来说时间紧迫,也没有必要——简单的值根本不需要多态性。但是和异常确实使用虚函数。
标签: c++ language-lawyer virtual-functions c++-standard-library pure-virtual