跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
  • Online Tools
  • 用户
  • 群组
折叠
品牌标识

D2Learn Forums

CS-liujfC

CS-liujf

@CS-liujf
关于
帖子
3
主题
2
群组
0
粉丝
0
关注
0

帖子

最新 最佳 有争议的

  • 析构函数为何会调用
    CS-liujfC CS-liujf
    class A
    {
    public:
        ~A() { std::cout << "A" << std::endl; }
    };
    
    class B : public A
    {
    public:
        ~B() { std::cout << "B" << std::endl; }
    };
    
    template <typename T>
    class MySharedV2
    {
    public:
        template <typename T2>
        MySharedV2(T2 *p)
        {
            data_ = p;
            deleter_ = [p](){ delete p;};
        }
        ~MySharedV2()
        {
            deleter_();
        }
        T* operator->()
        {
            return data_;
        }
    private:
        std::function<void()> deleter_;
        T* data_ = nullptr;
    };
    
    int main(){
        MySharedV2<A> ptr(new B());
    }
    

    对于上述代码,B的析构函数被调用我能理解,因为MySharedV2的析构函数会调用B的析构函数,但A的析构函数为什么也会被调用,是什么地方调用的它?


  • 析构函数为何会调用
    CS-liujfC CS-liujf

    我明白了,如此写等价于直接delete B类型指针,当然会调用A的析构函数

  • 登录

  • 没有帐号? 注册

  • 登录或注册以进行搜索。
d2learn forums Powered by NodeBB
  • 第一个帖子
    最后一个帖子
0
  • 版块
  • 最新
  • 标签
  • 热门
  • Online Tools
  • 用户
  • 群组