Deleting derived classes in std::unique_ptr<Base> containers

后端 未结 2 626
我寻月下人不归
我寻月下人不归 2021-01-07 05:05

I\'m a little confused. Basically, I\'ve got 2 different resource managers (AudioLibrary and VideoLibrary) that both inherit from a shared BaseLibrary class. This base class

2条回答
  •  南方客
    南方客 (楼主)
    2021-01-07 05:10

    This is due to the fact that you haven't declared your Media destructor virtual. As you can see, if you do, for example:

    struct Media {
        virtual ~Media() = default;
    };
    
    struct AudioLibrary : Media {};
    struct VideoLibrary : Media {};
    
    int main() {
        std::map> map;
        map[0] = std::unique_ptr(new AudioLibrary());
        map[1] = std::unique_ptr(new VideoLibrary());
    }
    

    demo

    both destructors will be called.

提交回复
热议问题