DeleteObject – プログラミング – Home

通知
すべてクリア

[解決済] DeleteObject


Zoom
 Zoom
(@Zoom)
ゲスト
結合: 23年前
投稿: 3
Topic starter  

DeleteObjectで、宣言しかしていないオブジェクトを
削除しても問題ないですか?
アプリケーションの使い方によって、そのオブジェクトを
作らない場合があるんです。


引用未解決
トピックタグ
kokin
 kokin
(@kokin)
ゲスト
結合: 23年前
投稿: 7
 

問題あるかないかは分かりませんが変数を0やNULLで初期化すれば問題ないかと
思います。

そうすればDeleteObjectのところで(変数をhogeとすると)
//ポインタならif(hoge != NULL)
if(hoge != 0){
DeleteObject(hoge);
}

はずしてたらすいません。


返信引用
Zoom
 Zoom
(@Zoom)
ゲスト
結合: 23年前
投稿: 3
Topic starter  

HPEN hPen = 0;
なら問題なしですか。

HPEN hPen;
だとどうでか?

if(hoge != 0)DeleteObject(hoge);
なら確実だけど、少しでも処理を減らしたいから
そこのところを詳しく教えてほしいです。


返信引用
kazuma
 kazuma
(@kazuma)
ゲスト
結合: 23年前
投稿: 217
 

MSDN で DeleteObject の説明を見ると、
> If the specified handle is not valid or is currently selected into a device
> context, the return value is zero.

となっているので DeleteObject に NULL を渡すのは問題なさそうですね。
ただ、初期化してないローカル変数の hPen を渡すのはやめておいたほうがいいと
思います。どんな値が入っているかわかりませんから。


返信引用
kokin
 kokin
(@kokin)
ゲスト
結合: 23年前
投稿: 7
 

>指定したハンドルが有効でない場合、またはデバイスコンテキストでそのオブジェクトが選択
>されている場合は、0 が返ります。
MSDN OnLine DeleteObject より

kazumaさんが引用した物の日本語訳ですがこれを読む限りではどんな変な値を渡しても
0が返るだけで問題なさそうですが。
実際100万回くらい無効な値をDeleteObjectに渡してみて削除してみましたが
特に問題なかったです。参考になればいいですが・・・

main()
{
inti;

for(i=0;i<1000000;i++)
{
func();
}

return 0;
}

void func(void)
{
HPEN hoge;

DeleteOject(hoge);
}


返信引用
kazuma
 kazuma
(@kazuma)
ゲスト
結合: 23年前
投稿: 217
 

> kazumaさんが引用した物の日本語訳ですがこれを読む限りではどんな変な値を渡しても
> 0が返るだけで問題なさそうですが。

たまたま有効なハンドルになっているとまずいですよね。
削除するつもりの無いものを削除することになります。


返信引用
kokin
 kokin
(@kokin)
ゲスト
結合: 23年前
投稿: 7
 

それもそうですね。(^^;
出来るだけ処理を減らしたいって言うのも判りますが
チェックはした方が良いのでは?


返信引用
Zoom
 Zoom
(@Zoom)
ゲスト
結合: 23年前
投稿: 3
Topic starter  

ありがとうございます。
難しい話だから聞く一方でした。

教えていただいたことから、処理を最小限にするために
HPEN hPen = 0;
として、
DeleteObject(hPen);
とすることにしました。

HPEN hPen;
では削除するつもりの無いものを削除するばあいがあるんですね。
質問してよかったです。


返信引用
kazuma
 kazuma
(@kazuma)
ゲスト
結合: 23年前
投稿: 217
 

今更ですいませんが、そこまでして処理を減らす必要があるんでしょうか?


返信引用
とおりすがり
 とおりすがり
(@とおりすがり)
ゲスト
結合: 23年前
投稿: 180
 

今更ですいませんが、既に解決した質問に質問した理由を聞く必要があるんでしょうか?


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました