首页 >后端开发 >C++ >尽管类型擦除,'std::shared_ptr”如何保持析构函数功能?

尽管类型擦除,'std::shared_ptr”如何保持析构函数功能?

Barbara Streisand
Barbara Streisand原创
2024-10-31 02:57:02607浏览

How Does `std::shared_ptr` Maintain Destructor Functionality Despite Type Erasure?

类型擦除和 std::shared_ptr 的功能

使用 std::shared_ptr 类时,通常会观察到它std::shared_ptr以令人惊讶但实用的方式表现。这种现象源于 std::shared_ptr 使用类型擦除的基本概念。

类型擦除和析构函数调用

std::shared_ptr 通过内部存储来利用类型擦除当指针被销​​毁时调用的删除器函数。该函数负责释放共享指针指向的内存。重要的是,删除器函数是特定于类型的,这意味着它知道如何销毁特定类型的对象。

std::shared_ptr;和类型擦除

转换 std::shared_ptr;到 std::shared_ptr;不删除特定于类型的删除器功能。删除器仍然与共享指针相关联,并且在销毁时仍然会被调用,即使显式类型信息已被删除。这是因为删除器函数与指向的对象分开存储,并且不受类型转换的影响。

析构函数调用的后果

当 std: :shared_ptr;被销毁,调用存储的删除器函数。如果删除器之前与 std::shared_ptr 关联,它仍然会尝试使用类型 T 的析构函数来析构指向的对象。这就是填充 std::vector<:shared_ptr std::shared_ptr>

标准保证的行为

虽然 std::shared_ptr 在这方面的当前行为没有明确说明C 标准,它被广泛认为是最常见编译器使用的类型擦除实现的副作用。但是,未来对 std::shared_ptr 内部实现的更改可能会破坏依赖此行为的代码。因此,不建议依赖 std::shared_ptr 的功能。因为标准不保证它。

以上是尽管类型擦除,'std::shared_ptr”如何保持析构函数功能?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn