使D只能在堆上创建: class B { public: virtual ~B() = 0 { } }; class D : public B { private: virtual ~D() { } }; int main() { B* pb = new D; delete pb; return 0; }