C ++: Wie verhindere ich, dass eine Funktion einen inline zugewiesenen Zeiger akzeptiert?

Konnte nicht herausfinden, wie die Frage richtig formuliert werden kann. Hier ist ein Beispiel:

Gab diesen Funktionsprototyp:

void Foo(myClass* bar);

Ich möchte diese Verwendung verhindern:

Foo(new myClass());

und erfordern stattdessen ein zuvor erstelltes Objekt:

myClass* bar = NULL;
bar = new myClass();
Foo(bar);

ode

myClass bar;
Foo(&bar);

Vielen Dank

BEARBEITE

Hier ist ein klares Beispiel:


void Mouse::SetImage(BITMAP* image, int focusX, int focusY) {
    if(_image) {
        set_mouse_sprite(NULL);
        set_mouse_sprite_focus(0, 0);
        show_mouse(NULL);
        destroy_bitmap(_image);
        _image = NULL;
    }
    if(image) {
        _image = create_bitmap(image->w, image->h);
        clear_bitmap(_image);
        blit(image, _image, 0, 0, 0, 0, image->w, image->h);
    }
    if(image == NULL) {
        focusX = 0;
        focusY = 0;
    }
    _focusX = focusX;
    _focusY = focusY;
    _dirtyImage = true;
}

Was auch immer das Bild ist, das der Benutzer eingibt, wird in das Bild des Objekts kopiert.

Wenn ich das übergebene Bild nach dem Kopieren freigebe und das Bild an einer anderen Stelle im Programm verwendet wird, stürzt das Programm mit einer Zugriffsverletzung ab.

Wenn sie den Speicher inline zuweisen und ich ihn nicht freigebe, tritt ein Speicherverlust auf. Das Problem wird noch verstärkt, wenn die SetImage-Methode im Laufe des laufenden Programms mehrmals aufgerufen wird.

Kommentare zur Verwendung alternativer Bibliotheken oder zur Allegro-Bibliothek selbst werden ignoriert, ich weiß bereits, dass es schrecklich ist. Ich habe keine Wahl.

Antworten auf die Frage(10)

Ihre Antwort auf die Frage