首页 > 后端开发 > C++ > 在多态类中,'shared_ptr”可以在没有虚拟析构函数的情况下工作吗?

在多态类中,'shared_ptr”可以在没有虚拟析构函数的情况下工作吗?

Patricia Arquette
发布: 2024-12-06 06:44:12
原创
274 人浏览过

Can `shared_ptr` Work Without Virtual Destructors in Polymorphic Classes?

非多态共享指针:揭开秘密

Lidström 先生和 Tsirunyan 先生之间的激烈争论提出了一个基本问题:实现shared_ptr而不需要多态虚拟析构函数是可行的上课吗?

先生。 Lidström 的断言shared_ptr

但是,C 11 标准和 Boost 库表明,这样的实施确实是可能的。这一壮举是通过“类型擦除”的概念来完成的:

template<class T>
class shared_ptr
{
public:
   ...
   template<class Y>
   explicit shared_ptr(Y* p);
   ...
};
登录后复制

在提供的示例中,shared_ptr

当引用计数降至零时,删除器对象将了解调用派生类的结构来处理分配的内存。

C 11 标准在以下要求中明确指定了此行为构造函数:

Requires: ... The expression delete p shall be well formed, shall have well defined behaviour and shall not throw exceptions.
Effects: Constructs a shared_ptr object that owns the pointer p.
登录后复制

这可以确保正确调用删除器并安全地释放内存,即使指针从 Derived 转换为 Base。

同样,标准概述了析构函数行为:

Effects: ... Otherwise, if *this owns a pointer p, and delete p is called.
登录后复制

通过利用模板化构造函数和类型擦除,shared_ptr 可以避免对 virtual 的需要多态类中的析构函数,为更广泛的场景提供高效的内存管理。

以上是在多态类中,'shared_ptr”可以在没有虚拟析构函数的情况下工作吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板