質問を正確に表現する方法がわからなかったので、次に例を示します。
この関数プロトタイプを考えると:
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;
}
ユーザーが渡す画像はすべて、オブジェクトの画像にコピーされます。
渡された画像をコピーした後で割り当てを解除し、その画像をプログラムの他の場所で使用すると、アクセス違反でプログラムがクラッシュします。
ストレージをインラインで割り当て、割り当てを解除しないと、メモリリークが発生します。実行中のプログラムの過程でSetImageメソッドを複数回呼び出すと、問題はさらに複雑になります。
代替ライブラリの使用やAllegroライブラリ自体に関するコメントは無視されますが、それが恐ろしいことはすでにわかっています。仕方がない。