いやまさかこんなに苦しめられるとは・・・・
スマートポインタが循環参照していて、メモリリークしていたんですよ。
そのことに気付くのに二日くらいかかったんですが・・問題はその後で・・・
結構ややこしいところだったので、それを解決するのに六日ほど・・・・
合計一週間以上苦しめられました・・・・
今日やっと解決したんですが、「よっしゃー!!」って叫びそうになりましたよ。
ヘッダーファイルに循環参照にも苦しめられましたし、
分かりにくいこのバグは厄介ですね・・・
一週間以上の戦い。
Re: 一週間以上の戦い。
スマートポインタはスマートポインタをコピーしないとダメなんですよね。
スマートポインタに限らずテンプレートライブラリは遍くそういうふうなのでうっかり生ポインタに触れると破綻するコードになりがちです。
スマートポインタに限らずテンプレートライブラリは遍くそういうふうなのでうっかり生ポインタに触れると破綻するコードになりがちです。
Re: 一週間以上の戦い。
弱参照をうまく使わないと循環するのはわかっていても,弱参照をどこに使うかは悩ましいですよね。
強参照のスマートポインタは透過ですが,弱参照のスマートポインタは透過ではないですから。
# 弱参照は無効化される可能性があるため。std::weak_ptrならlockの戻り値確認が必要。
GC組み込み言語でも参照カウント式GCだと循環参照が発生しますね。
PHP 5.2までが参照カウントのみで,弱参照もないという面倒な作りになっています。
# 5.3から循環参照を検知するアルゴリズムが有効になっています (php.iniで無効化可能)。
強参照のスマートポインタは透過ですが,弱参照のスマートポインタは透過ではないですから。
# 弱参照は無効化される可能性があるため。std::weak_ptrならlockの戻り値確認が必要。
GC組み込み言語でも参照カウント式GCだと循環参照が発生しますね。
PHP 5.2までが参照カウントのみで,弱参照もないという面倒な作りになっています。
# 5.3から循環参照を検知するアルゴリズムが有効になっています (php.iniで無効化可能)。
Re: 一週間以上の戦い。
返信おくれてすいません。
>>ISLeさん
スマートポインタはスマートポインタにしかコピーしてはいけないというこですか?
それならしっかりとしています。
>>Yuoさん
そうなんですよね・・・
設計の時に気付いていればまだマシなんですが・・・
>>ISLeさん
スマートポインタはスマートポインタにしかコピーしてはいけないというこですか?
それならしっかりとしています。
>>Yuoさん
そうなんですよね・・・
設計の時に気付いていればまだマシなんですが・・・