【GUIライブラリ】wxWindowsでのひょーん
at TECH
[
2ch
|
▼Menu
]
■コピペモード
□
スレを通常表示
□
オプションモード
□このスレッドのURL
■項目テキスト
100:デフォルトの名無しさん 03/05/23 04:00 >>99 詳しくはないけど"C++ Array"が通常のC++配列(new wxBitmap[N];で確保した配列) のことだとした場合に考えられる問題は>>83にも書いてある通り delete[]で削除すべきオブジェクトをdeleteで削除してしまう問題が発生するのでは 101:デフォルトの名無しさん 03/05/23 07:15 wxBitmapから辿ってソースを眺めてみたところ wxObjectRefDataクラスが参照カウンタをもっていて wxObjectのm_refDataメンバにwxObjectRefDataの派生クラスのオブジェクトを指すことで wxObjectのRef(),UnRef()メンバを使ってwxObjectRefDataの派生クラスのオブジェクトを 管理することができるようになっているみたいです これがwxWindowsが自動的に削除するオブジェクトの仕組みだとすると、 参照カウンタが0になって削除されるのはwxObjectRefDataの派生クラスのオブジェクトのほうで >>83も>>87も問題なさそうな気がするのでもしかしたら的外れかもしれない・・・ 102:65 03/05/23 07:49 >>99 ごめんなさい、私がC++のdelete[]の仕様を誤解しておりました。 delete[]は要素についてデストラクタを呼ばないと思っていましたが、そうでは ないのですね。wxObjArray(でないといけない)説は撤回します。 普通の配列でも同じ話が出来るということで。 memory problemsが何を指すかですが、wxObjectは基本的にハンドラで、データ の実体であるRefDataへのポインタを持ちます。RefDataはリファレンスカウント で管理されます。wxObjectがデストラクタでUnRef()するとカウントが減り、0 になれば破壊されます。 main loopを抜けたあとでリソースのclean upが行われるとすると、この時点で RefDataは破壊されます。万一、この時点でまだ配列が生き残っていて、それが これより後にdelete[]され、そしてそれぞれの要素のデストラクタが呼ばれると、 破壊されたRefDataを触ることになるので問題が発生します。 ……ということを言っているように思います。 もっとも、少なくともwxMSWのwxBitmapではcleanupはやってなさそうに見えます。 >>96 現状でもEUC-JP/SJIS変換できますよ。iconv使えますから。
次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
レスジャンプ
mixiチェック!
Twitterに投稿
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch
5023日前に更新/338 KB
担当:undef