Überladen neu / löschen
Mache ich ein kleines memory-leak-finder in mein Programm, aber
meine Art der überlastung und löschen (und auch new[] und delete[])
scheint nicht, etwas zu tun.
void* operator new (unsigned int size, const char* filename, int line)
{
void* ptr = new void[size];
memleakfinder.AddTrack(ptr,size,filename,line);
return ptr;
}
Den Weg, den ich überlastet new
ist dargestellt in der code-Ausschnitt. Ich denke, es ist etwas mit dem Betreiber der Rückkehr void*, aber ich weiß nicht, was zu tun ist.
InformationsquelleAutor der Frage Brammie | 2009-02-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kann das nicht tun. Fix it.
Nie versuchen zu überladen mit new/delete weltweit. Entweder haben Sie in einer Basisklasse, und leiten Sie alle Ihre Objekte von dieser Klasse oder ein namespace oder eine template-Zuweisung-parameter. Warum, könnten Sie Fragen. Da bei deinem Programm ist mehr als eine einzelne Datei und mit STL-oder anderer Bibliotheken, die Sie gehen zu vermasseln.
Hier ist eine destilliertem version von
new
Betreiber von VS2005new.cpp
:InformationsquelleAutor der Antwort dirkgently
RE:
Warum ist es, wenn jemand versucht, auf ein weniger häufiges Merkmal von C++, jemand wirkt, wie es sollte nie getan werden?
Es ' s alle Zeit getan, es ist durchaus üblich, und ich habe nicht arbeitete für die Firma, die das nicht getan haben.
Weltweit überlastet new und delete sind extrem hilfreich im tracking-Speicher, Speicher-Fehler, buffer-overruns, etc..
Niemand in Ihr Recht Geist wird zu gehen durch ein Programm mit mehreren Millionen Zeilen code, und fügen Sie eine neue und löschen Sie Mitglied und jeder Klasse. Das ist einfach nur dumm.
InformationsquelleAutor der Antwort Dan
Vielleicht können Sie tun, was Sie wollen mit etwas Präprozessor-Magie:
InformationsquelleAutor der Antwort kyku
Ich denke, das problem hier ist, dass Ihr neuer parameter-Profil entspricht nicht dem standard, operator new, so dass man nicht immer versteckt (und ist damit immer noch verwendet wird).
Ihre parameter-profile für neue und löschen müssen wie folgt Aussehen:
InformationsquelleAutor der Antwort T.E.D.
Sind Sie aufrufen der überladenen operator richtig, also, übergeben Sie die zusätzlichen Parameter?.
InformationsquelleAutor der Antwort zvrba
Das problem setzt sich mit den Argumenten, die Sie Hinzugefügt haben, um die neuen überladenen operator. Versuchen Sie, mit dem Namen und line global in irgendeiner Weise (oder member-Variablen, wenn Sie überladen von new und delete für eine einzelne Klasse). Das sollte besser funktionieren.
InformationsquelleAutor der Antwort Benoît