为什么`std::shared_ptr` 存储类型擦除删除器

Cur*_*ous 5 c++ atomic type-erasure shared-ptr c++11

为什么std::shared_ptr接受删除器作为构造函数参数而不是模板参数?存储类型擦除删除器似乎违背了 C++ 哲学,即不向标准库组件添加任何不必要的开销。

我在这背后看到的唯一逻辑是,由于引用计数的原子增量成本如此之高,因此忽略了通过类型擦除进行的间接成本。但这似乎仍然是不必要的开销。