给定一个指向堆分配内存的指针,智能指针实现如何为它找到合适的释放函数?

Given a pointer to heap allocated memory, how do smart pointer implementations find the appropriate deallocation function for it?

为了练习,我正在尝试用 C++ 构建自定义智能指针库。

现在,我想,这个小项目会很简单,只需要一个指针列表,另一个每个指针引用数量的列表,以及一个智能指针 class 来封装所有这些性感的功能.

嗯,不,当然没那么简单,我很快运行就遇到了问题。给定一个指向堆分配内存的任意指针,我该如何编写 class 以便它以某种方式在某个时候找到用于该指针的正确的解除分配函数(new -> delete,new[] -> 删除[], malloc/realloc -> 免费等)

最重要的是,还有一个问题是我是否可以假设这个取消分配函数只会接受参数,这感觉像是一个不安全的假设,因为上帝只知道可能有隐藏在我使用的某些库中的两个参数取消分配函数。

我可以通过创建一个抽象 class 来解决这个问题,然后要求我的库的用户在我的智能指针实现中只使用从它派生的 classes,但这感觉很恶心,f运行kly un-enlightening.

我已经搜索了一段时间,我就是找不到合适的答案。因此,我想问问你们中是否有人可以向我解释实际的智能指针实现是如何解决这个问题的,它们是如何处理这些问题的?他们甚至打扰吗?

标准库中的智能指针不会尝试神奇地确定适当的释放函数。他们希望提供一个,作为模板参数 (std::unique_ptr) 或在 运行 时间,例如作为构造函数参数 (std::shared_ptr)。如果没有指定删除器,则对于指向非数组类型的指针,默认值为 delete,对于数组,默认值为 delete[](如 std::unique_ptr<int[]>)。

另请参阅:std::default_delete