我注意到,当我使用std::shared_ptr
(或任何其他智能指针)时,自定义分配器/删除器是通过 ctor 分配的,它恰好是一个模板。我的问题是:分配器/删除器是如何存储和使用的?
这些函子是存储为函数指针void*
,还是什么?是间接调用还是直接调用?
为了更清楚地了解我要问的内容,请考虑以下代码:
struct SomethingAwesomeDeleter
{
public:
void operator()(SomethingAwesome* ptr) const
{
// do something awesome
delete ptr;
}
};
typedef std::shared_ptr<SomethingAwesome> SomethingAwesomePtr;
SomethingAwesomePtr ptr{new SomethingAwesome, SomethingAwesomeDeleter{}};
如何SomethingAwesomeDeleter{}
存储和使用?
注意:
我确实意识到std::shared_ptr
是一个模板类,但是std::shared_ptr
在类模板参数中没有删除器/分配器的模板参数,即没有像std::shared_ptr<T, Allocator, Deleter>
.