[]C++析构函数调用有关问题

[求助]C++析构函数调用问题
基类A
派生类B
代码如下:
A *pA = new B();
delete A;
A = NULL;

如果A的析构函数设为virtual,那么析构调用顺序是派生类,基类;
而如果A的析构函数不是virtual,那么将会只调用基类A的析构函数;
请问这是为什么?
测试代码如下:
#include <iostream>

class CBase
{
public:
~CBase()
{
printf("CBase destruct\n");
}
virtual void PrintInfo() = 0;
};

void CBase::PrintInfo()
{
printf("this is a pure virtual function\n");
}

class CDerived : public CBase
{
public:
~CDerived()
{
printf("CDerived destruct\n");
}
void PrintInfo()
{
printf("this is a derived overide function\n");
CBase::PrintInfo();
}
};

void TestPureVitualFunc()
{
CBase *pB = new CDerived();
pB->PrintInfo();
delete pB;
pB = NULL;
}

------解决思路----------------------
http://www.360doc.com/content/14/0226/10/1317564_355777681.shtml
------解决思路----------------------
自己搜搜虚析构的知识看看。
------解决思路----------------------
去看看虚函数多态的章节就是了。