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

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

本文关键字:指针 实现 函数 释放 智能 一个 内存 分配      更新时间:2023-10-16

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

现在,我想,这个小项目会很容易,只需有一个指针列表,另一个每个指针的引用数列表,以及一个智能指针类来封装所有这些性感的功能。

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

除此之外,还有一个问题是我是否可以假设这个去分配函数只会接受争论,这感觉就像一个不安全的假设,因为上帝只知道可能有一个双参数去分配函数隐藏在我使用的某些库中。

我可以通过创建一个抽象类来解决这个问题,然后要求我的库的用户在我的智能指针实现中仅使用从它派生的类,但这感觉很恶心,坦率地说没有启发性。

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

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

另请参阅:std::default_delete