小编sea*_*anh的帖子

C++中的智能指针删除

我在这里阅读智能指针实现,一切都很好,如示例所示.但是,如果我尝试向上转换对象指针并使用智能指针,那么将会有一个关于被释放的对象的运行时错误投诉没有分配,有人可以告诉我发生了什么以及如何解决它?谢谢

#include <iostream>

template <class T>
class SmartPointer{
    T* ptr = nullptr;
public:
    explicit SmartPointer(T* t):ptr(t){}
     virtual ~SmartPointer(){
        std::cout<<"call delete here"<<std::endl;
        if (ptr!=NULL){
            delete (ptr);
        }
    }
    T & operator*(){
        return *ptr;
    }
    T * operator->(){
        return ptr;
    }

};



class Animal{
public:
    virtual void get_name(){};
    virtual ~Animal(){std::cout<<"animal is destroied"<<std::endl;}
};



class Dog:public Animal{
    std::string d_name;
public:
    Dog(std::string n):d_name(n){}
    virtual ~Dog(){std::cout<<"dog is destroied"<<std::endl;}
    void get_name(){std::cout<<"the name is "<<d_name<<std::endl;}
};


int main(int argc, const char * argv[]) {
// …
Run Code Online (Sandbox Code Playgroud)

c++ smart-pointers

0
推荐指数
1
解决办法
103
查看次数

标签 统计

c++ ×1

smart-pointers ×1