Если они выделены в куче обычным указателям, и если удаление никогда не вызывается для этих указателей, то они никогда не будут уничтожены, поэтому порядок уничтожения спорный.
С другой стороны, если вы назначаете их статическим интеллектуальным указателям и если они находятся в одной и той же единице перевода, то первый созданный будет последним уничтоженным:
static std::auto_ptr <AType> a( new AType ); // destroyed second
static std::auto_ptr <BType> b( new BType ); // destroyed first
И давайте не будем придираться к статическому устареванию: -)