C++反复给你一种感觉,你甚至不理解基本概念.在这种情况下:继承.
通过向ctors和dtors添加print语句,你会发现对于两个指针(旧式和智能指针)只有~A,而不是~B被调用.这是因为A的dtor不是虚拟的.
Scott Meyers说:" 多态基类应该声明虚拟析构函数.如果一个类有任何虚函数,它应该有一个虚拟析构函数"
通过添加修复此问题
struct A { virtual ~A() = default; };