GNU C++ 智能指针4-- 解析_Sp_counted_ptr类

本文详细解析了C++中的final关键字,用于禁止类继承和虚函数重写;=delete关键字,用于禁用默认函数;noexcept关键字,表明函数不会抛出异常;以及在智能指针模板类_Sp_counted_ptr中的应用,包括其构造函数、析构函数和 deleter 的实现。此外,还讨论了explicit关键字的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、关键点解析

1、final关键字

2、=delete关键字

3、父类

4、noexcept关键字

5、explicit关键字

6、头文件

二、代码分析


一、关键点解析

1、final关键字

(1)、类禁止继承

      C++11中允许将类标记为final,方法时直接在类名称后面使用关键字final,如此,意味着继承该类会导致编译错误。

(2)、虚函数禁止重写

       C++中还允许将虚函数方法标记为fianal,这意味着无法再子类中重写该方法。

2、=delete关键字

      禁止使用编译器默认生成的函数

3、父类

    _Sp_counted_ptr类的父类为_Sp_counted_base(https://blog.csdn.net/kupepoem/article/details/119848082

4、noexcept关键字

     不抛出异常

5、explicit关键字

      它的作用是表明该构造函数是显示的, 而非隐式的。

6、头文件

shared_ptr_base.h

二、代码分析

 // Counted ptr with no deleter or allocator support
  template<typename _Ptr, _Lock_policy _Lp>
    class _Sp_counted_ptr final : public _Sp_counted_base<_Lp>
    {
    public:
      explicit
      _Sp_counted_ptr(_Ptr __p) noexcept
      : _M_ptr(__p) { }

      virtual void
      _M_dispose() noexcept
      { delete _M_ptr; }

      virtual void
      _M_destroy() noexcept
      { delete this; }

      virtual void*
      _M_get_deleter(const std::type_info&) noexcept
      { return nullptr; }

      _Sp_counted_ptr(const _Sp_counted_ptr&) = delete;
      _Sp_counted_ptr& operator=(const _Sp_counted_ptr&) = delete;

    private:
      _Ptr             _M_ptr;
    };
  template<>
    inline void
    _Sp_counted_ptr<nullptr_t, _S_single>::_M_dispose() noexcept { }

  template<>
    inline void
    _Sp_counted_ptr<nullptr_t, _S_mutex>::_M_dispose() noexcept { }

  template<>
    inline void
    _Sp_counted_ptr<nullptr_t, _S_atomic>::_M_dispose() noexcept { }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kupeThinkPoem

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值