2016-09-09 3 views
0

Ich implementiere einen benutzerdefinierten Speicherzuweisungsprozess und überschreibe global new, new [] und delete, delete []. Die Speicherzuweisung verwendet die Größe des Objekts und einen optionalen Parameter 'nObjects', in dem die Anzahl der zu erstellenden Objekte (standardmäßig 1) angegeben wird.Zugriff auf die in new [] übergebene C++

Neu funktioniert gut, aber mit new [] gibt der Wert size_t nur den Gesamtwert von nObjects * sizeOfObject zurück. So kann ich die Anzahl der tatsächlich zugewiesenen Objekte nicht kennen, nur die Größe.

Ich schaute in der Versammlung und die Anzahl der Objekte ist definitiv da, herumgereicht wird, aber meine Frage ist: Gibt es eine sichere Möglichkeit, es im Rahmen der globalen neuen [] überschreiben?

Danke.

EDIT:

Btw, ich bin die individuelle Zuordnung zu schaffen, so dass jede andere Klasse, die mit ihm erstellt wird nichts tun müssen, um extra für die Speicherzuweisung zu berücksichtigen. z.B. Ich kann einfach die Klasse where {} erstellen und zuweisen, ich muss sie nicht von irgendetwas ableiten oder etwas extra in ihren Konstruktor/Destruktor einfügen.

Der Grund, warum ich dies tue, ist auch für einige externe Verwendungen von neu, dass ich keine Kontrolle über andere als in der globalen neuen Überschreibung haben.

+3

Hinweis: Ein neuer Ausdruck ruft zwei Aufrufe auf: 1) Speicherzuweisung mit Operator new. 2) Konstruktion des Objekts (der Objekte). Sie sollten sich nicht um die Sekunde in Ihren benutzerdefinierten Operatoren kümmern. –

+0

Ich bin ansonsten zweifelhaft [dies] (http://stackoverflow.com/questions/3868962/how-do-you-get-the-size-of-array-that-is-passed-into-the-function) wäre weniger ein Problem. – NathanOliver

+0

... siehe auch http://en.cppreference.com/w/cpp/language/new –

Antwort

1

Gibt es einen sicheren Weg, um im Rahmen des globalen neuen [] Override darauf zuzugreifen?

Kein solcher Weg.

newoperators sind nur Speicherzuweisungen Funktionen, sie erhalten nur die Anzahl der Bytes, die sie zuordnen müssen (genau wie malloc).

Dies ist new expression, die die Anzahl der Objekte akzeptiert, Aufrufe operator new (die Sie überladen können) und ruft dann den Konstruktor auf. neuer Ausdruck kann nicht überladen werden.

Verwandte Themen