2

Boost 1.39 を使用しています。を使用してクラスを実装しましたboost::flyweight<no_locking, hashed_factory<> >(私のアプリケーションはシングルスレッドです)。クラスのテスト プログラムは問題なくパスしますが、アプリケーションで in を使用すると、in でパニックになります

#9  0x08de7c3e in boost::flyweights::detail::refcounted_value<boost::flyweights::detail::default_value_policy<SharedFileAttr>::rep_type, SharedFileAttr>::release (this=0x0) at /usr/include/boost/flyweight/refcounted.hpp:89
#10 0x08de7517 in boost::flyweights::detail::refcounted_handle<boost::flyweights::detail::refcounted_value<boost::flyweights::detail::default_value_policy<SharedFileAttr>::rep_type, SharedFileAttr> const*, boost::flyweights::detail::flyweight_core_tracking_helper<boost::flyweights::detail::default_value_policy<SharedFileAttr>, mpl_::na, boost::flyweights::refcounted, boost::flyweights::hashed_factory<mpl_::na, mpl_::na, mpl_::na, 0>, boost::flyweights::no_locking, boost::flyweights::static_holder> >::~refcounted_handle (this=0xf32fe61c, 
    __in_chrg=<value optimized out>) at /usr/include/boost/flyweight/refcounted.hpp:131
#11 0x08e2edfe in boost::flyweights::flyweight<SharedFileAttr, boost::flyweights::no_locking, boost::flyweights::hashed_factory<mpl_::na, mpl_::na, mpl_::na, 0>, boost::parameter::void_, boost::parameter::void_, boost::parameter::void_>::operator= (this=0xf32fe7e4, x=...)
    at /usr/include/boost/flyweight/flyweight.hpp:196

フレーム #9 では 0x0 であることに注意してください

boost::flyweight を使用して参照カウントの問題を引き起こす可能性があるコードから、どのようにして可能性があるのか​​ わかりません。結局のところ、私のインターフェイスには、flyweight オブジェクトを追加して破棄するためのメソッドしか含まれていません。

問題を解決する方法がわかりません。何か案は?

4

1 に答える 1

2

お恥ずかしい話ですが、問題は、初期化されていないフライウェイト オブジェクトを別のオブジェクトに割り当てようとしたことです。すべてのクラスメンバーを初期化することを忘れないでください...

于 2012-08-07T13:33:53.057 に答える