Я знаю, что есть модуль Boost для serialization boost::shared_ptr
, но я ничего не могу найти для std::shared_ptr
.
Кроме того, я не знаю, как его легко реализовать. Я боюсь, что следующий код
namespace boost{namespace serialization{
template<class Archive, class T>
inline void serialize(Archive & ar, std::shared_ptr<T> &t, const unsigned int version)
{
if(Archive::is_loading::value) {T*r;ar>>r;t=r;}
else {ar<<t.get();}
}
}}//namespaces
не работает. В самом деле, если какой-то объект был передан несколько раз, он будет загружен с первым запуском ar>>r
, после чего будет скопирован только указатель. Однако мы бы создали несколько объектов shared_ptr
, указывающих на него, и, следовательно, уничтожили бы его более одного раза.
Любые идеи по этому поводу?
Некоторые технические сведения о используемой системе:
- ОС: Ubuntu 11.10 (x64)
- Компилятор: g++ (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1
- boost: 1.46.1 (установлен с
sudo apt-get install libboost-dev
)