Baseに仮想デストラクタ書いて(Base*を扱うなら書くべき)
while(dynamic_cast<Parent*>(next))
でいいんじゃないの