Повышение: Сериализация: Кто очищает десериализованные данные? - PullRequest
2 голосов
/ 08 ноября 2010

Я сериализую и отправляю raw-указатель объекта в другое приложение.

При десериализации я получаю еще один raw-указатель.Это означает, что Boost :: Serialization создает объект за этим указателем внутри.Теперь мне любопытно, кто владеет этим объектом, и если Boost удалит этот объект, если он больше не нужен.

Некоторый код, который, возможно, лучше показывает, в чем вопрос:

void anyMethod()
{
    std::ifstream file("archiv.txt"); 
    boost::archive::text_iarchive ia(file); 
    AnyClass* object; 
    ia >> object; 
    //work with object
}

//Now what has happened to object?
//Is it deleted, cause it went out of scope?
//Do I have to delete it myself?

Ответы [ 3 ]

3 голосов
/ 08 ноября 2010

Мое понимание документации , касающейся сериализации указателей, заключается в том, что владение архивом сохраняется: «Загрузка одного и того же объекта указателя несколько раз приводит к созданию только одного объекта, тем самым реплицируя исходную конфигурацию указателя».Это, как правило, указывает на то, что библиотека обрабатывает бухгалтерский учет.

Кроме того, в архиве предусмотрен метод delete_created_pointers: «Удаляет все объекты, созданные загрузкой указателей. Это можно использовать, чтобы избежать утечек памяти, которые могутв противном случае происходит, если загружаются указатели, а при загрузке архива возникает исключение ".

0 голосов
/ 08 ноября 2010

Я не понимаю, почему AnyClass* object; является законным в этом контексте, ИМО, у вас должен быть объект AnyClass (посмотрите на http://en.highscore.de/cpp/boost/serialization.html), затем используйте его снова и снова. Теперь, когда этот объект ( не указатель) выходит из области видимости, он будет удален.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...