Ruft new[] new auf?
-
Hallo,
Ich habe mir den globalen operator new(size_t) überladen. Logischerweise wird der aufgerufen wenn ich schreibe:
int* i = new int;Ich habe jedoch NICHT die Array Version (operator new[](size_t size)) überladen. Also ging ich davon aus, dass
int* a = new int[5];nicht in meinen Code springt, sondern operator new[] meines Compilerherstellers benutzt. Zu meinem Erstaunen musste ich feststellen, dass mein operator new(size_t) aufgerufen wird! (mit size = 20).
Ist das normal? Ruft operator new[] immer operator new auf? Wenn ja: Muss ich dann überhaupt noch extra operator new[] überschreiben, wenn ich operator new schon überschrieben habe?
-
AllohaEh schrieb:
Ist das normal? Ruft operator new[] immer operator new auf? Wenn ja: Muss ich dann überhaupt noch extra operator new[] überschreiben, wenn ich operator new schon überschrieben habe?
Nein - ob die Operatoren aufeinander aufbauen, ist im Standard afaik nicht festgelegt. Das heißt, es ist durchaus erlaubt, daß der
operator new[]seine Daten vonoperator newholt - genausogut könnte jemand es genau umgekehrt machen oder beide Operatoren verwenden hinter den Kulissen eine gemeinsame alloc()-Funktion.
-
CStoll schrieb:
AllohaEh schrieb:
Ist das normal? Ruft operator new[] immer operator new auf? Wenn ja: Muss ich dann überhaupt noch extra operator new[] überschreiben, wenn ich operator new schon überschrieben habe?
Nein - ob die Operatoren aufeinander aufbauen, ist im Standard afaik nicht festgelegt. Das heißt, es ist durchaus erlaubt, daß der
operator new[]seine Daten vonoperator newholt - genausogut könnte jemand es genau umgekehrt machen oder beide Operatoren verwenden hinter den Kulissen eine gemeinsame alloc()-Funktion.Also besser operator new UND operator new[] überschreiben?
-
AllohaEh schrieb:
Also besser operator new UND operator new[] überschreiben?
Der Standard garantiert dir den Aufruf von
newbei einem Aufruf vonnew[]nicht, also ja.