17 Stimmen

C++ mischt neu/löschen zwischen Libs?

Wenn ich die new Schlüsselwort in meiner Bibliothek (die anders aufgebaut ist als meine Hauptanwendung), wenn ich es in meiner Hauptanwendung mit delete Besteht die Möglichkeit, dass ich einen Absturz/Fehler erhalte?

2voto

Sol Punkte 2095

Sie haben völlig Recht, dass es hier ein Problem gibt, aber für die meisten Fälle gibt es eine noch einfachere Lösung als die anderen Antworten (bisher) vorgeschlagen haben. Sie können new und delete weiterhin frei verwenden - alles, was Sie tun müssen, ist new und delete für jede Klasse in Ihrer Bibliothek zu überladen, die über DLL-Grenzen hinweg verwendet werden könnte.

Ich persönlich habe nur eine einfache Klasse definiert, um die benötigte Funktionalität bereitzustellen:

class NewDelete
{
    public:
        void *operator new (size_t size);
        void operator delete (void *memory);
        void *operator new (size_t size, void *ptr);
        void operator delete (void *memory, void *ptr);
};

Solange diese vier Mitgliedsfunktionen alle in derselben DLL definiert sind, ist jede Klasse, die von dieser Klasse abgeleitet ist, automatisch "DLL-sicher" - new und delete können ganz normal verwendet werden, ohne sich um DLL-Grenzen zu kümmern.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X