可以在关闭时进行任意清理吗? " />
尽管有预期,std::shared_ptr 可用于在关闭时执行任意清理,即使使用 std::shared_ptr
类型擦除
当创建shared_ptr时,它封装了拥有的指针与删除器函数一起。该函数通常默认调用delete,但可以通过构造函数进行不同的配置。在销毁shared_ptr时,将调用存储的删除器,从而触发对象的清理。
要了解类型擦除,考虑以下使用 std::function:
<code class="cpp">template <typename T> void delete_deleter(void *p) { delete static_cast<T *>(p); } template <typename T> class my_unique_ptr { public: my_unique_ptr(T *p, void(*deleter)(void *p) = &delete_deleter<T>) : p(p), deleter(deleter) {} ~my_unique_ptr() { deleter(p); } private: T *p; void(*deleter)(void *); }; int main() { my_unique_ptr<void> p(new double); }</code>
的简化示例,这里, my_unique_ptr
std::shared_ptr 和类型擦除
共享指针也使用类型擦除。当从另一个复制或默认构造一个shared_ptr时,删除器信息将被保留。这意味着shared_ptr
根据C 标准,这种行为是得到保证的。实现不能以破坏此功能的方式更改 std::shared_ptr 的内部结构。因此,使用 std::shared_ptr
以上是std::shared_ptr