C ++: Как запретить функции принимать указатель, который размещены в строке?

Не могу понять, как правильно сформулировать вопрос, поэтому вот пример:

Учитывая этот прототип функции:

void Foo(myClass* bar);

Я хочу предотвратить это использование:

Foo(new myClass());

и вместо этого требовать ранее созданный объект:

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

или

myClass bar;
Foo(&bar);

Спасибо.


РЕДАКТИРОВАТЬ

Вот поясненный пример:


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;
}

Любое изображение, которое пользователь передает, копируется в изображение объекта.

Если я освобождаю переданное изображение после его копирования, и изображение используется в другом месте в программе, это приведет к аварийному завершению программы с нарушением прав доступа.

Если они выделяют хранилище in-line, а я не освобождаю его, происходит утечка памяти. Проблема усложняется, если они вызывают метод SetImage несколько раз в ходе работы программы.

Комментарии об использовании альтернативных библиотек или самой библиотеки Allegro будут игнорироваться, я уже знаю, что это ужасно. У меня нет выбора.

5
задан Casey 16 August 2010 в 02:25
поделиться