Не могу понять, как правильно сформулировать вопрос, поэтому вот пример:
Учитывая этот прототип функции:
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 будут игнорироваться, я уже знаю, что это ужасно. У меня нет выбора.