Du solltest dir unbedingt die von David gepostetet Lösung anschauen. Wieso verschachtelte Vektoren keine gute Lösung sind, wurde
hier schonmal lang und breit diskutiert...
Da ich, als ich meine erste Antwort hier verfasst hab, leider gerade nicht genug Zeit für eine ausführlichere Antwort hatte, kann ich das an dieser Stelle ja nachholen:
new Tile[areaWidth, areaHeight]; erzeugt ein eindimensionales Array aus
areaHeight Elementen. C++ kennt keine dynamischen mehrdimensionalen Arrays wie z.B. C#.
Tile[areaWidth, areaHeight] ist in C++ einfach ein eindimensionales Array aus Objekten vom Typ Tile, dessen Größe vom Ausdruck
(areaWidth, areaHeight) bestimmt wird. Der Kommaoperator entspricht in C++ einer Verkettung von Ausdrücken, die in der Reihenfolge ihres Auftretens von links nach rechts ausgewertet werden, wobei der Gesamtausdruck den Wert des letzten Teilausdrucks annimmt.
(areaWidth, areaHeight) entspricht also einfach dem Wert von areaHeight.
Der Grund, wieso C++ keine mehrdimensionalen Arrays dynamischer Größe kennt, ist auch schnell erklärt:
new legt einfach einen zusammenhängenden Speicherblock entsprechender Größe an, konstruiert Objekte darin und gibt einen Pointer auf das erste Element zurück. Um dynamische mehrdimensionale Arrays zu unterstützen, müsste C++ sich intern irgendwo die Abmessungen des Arrays merken, um auf die Elemente zugreifen zu können, da diese für die Addressberechnung benötigt werden. Mit anderen Worten: Man müsste genau das, was z.B. Davids Klasse macht, in die Sprache einbauen. Das widerspricht aber der Philosohpie von C++, die Sprache an sich minimal zu halten und jede komplexere Funktionalität aus diesen einfachen Mitteln zu bauen.