共有ポインタが原因で、プログラムのダーティシャットダウンで問題が発生しました。解決策を見つけましたが、正しい答えがあるかどうかはわかりません。
これは最小限の例です。
double var;
boost::shared_ptr<const double> ptr1 (&var); // creates an invalid pointer on program exit
boost::shared_ptr<const double> ptr2 (new double); // works fine
int main (int argc, char **argv)
{
return 0;
}
これが私が検証したい私の答えです:
ポイントされたオブジェクトの場合ptr1
、ポインタの前に削除され、ポインタは無効なアドレスを指します。しかしptr2
、共有ポインタの「スマートさ」の場合、上記の問題を処理します。本当ですか?
ちょっとした追加の質問:ptr1を機能させる方法はありますか(私は試しましたreset()
)、それともその悪いプログラミング手法ですか(もしそうならなぜですか)?
説明してくれてありがとう!