Die Objekte würden natürlich in den Containern erstellt und nicht auf dem Stack.
Das heißt aber natürlich auch, dass die Methode, die die Objekte erstellt, schon wissen muss, in was für einem Container sie mal landen sollen. Das finde ich sehr ungünstig bis schlecht.
Nicht unbedingt, oft ist es sogar von Vorteil. Wenn ich beispielsweise schnell mal über alle Instanzen einer bestimmten Art von NPC iterieren will, kann ich das so einfach, natürlich und effizient lösen. Wenn ich eine Liste mit Zeigern auf alle polymorphen NPC Objekte brauch, kann ich die immer noch machen. Hätte ich nur diese Liste, bräuchte ich nun Double Dispatch oder gar dynamic_cast...
Auch wenn du mit der einfacheren Iteration Recht hast, habe ich noch nie gesehen, dass jemand so einen Unsinn von Code verzapft und zwei Dutzend verschiedene Container erstellt. Das klingt für mich einfach kontraproduktiv. Dann auch noch mehrere zu verwalten, damit ich auch noch über alle gleichzeitig iterieren kann, das macht den Code zu wahren If/Switch-Hölle.