c++父类指针为什么能访问子类私有成员函数

#include
using namespace std;
class A{
public :
virtual void Fun(){
cout<<"A::Fun()"<<endl;
}

};
class B:public A{
private :
void Fun(){
cout<<"B::Fun()"<<endl;
}

};

int main(){
A *pa = new A;
pa->Fun();
pa = new B;
pa->Fun();
return 0;
}

因为pa是一个A*型指针,pa->访问的始终是A类的成员。A类的public的fun()函数当然可以由它的对象访问了。(这个程序运行结果应该是两个A::fun())

因为 virtual void Fun() 是虚函数, 类B继承类A,所以B::Fun()也是徐函数,而且是重写了类A的Fun()函数,在main函数创建了一个B类的实例,并用一个父类A的指针指向它,根据虚函数的继承,这个指针将会调用类B的Func函数,这个main函数写法很有问题啊,创建了两个实例都没有删除,有内存泄漏