LINUX.ORG.RU

Сохранение объектов в битовом потоке


0

0

Здравствуйте !

Перехожу сразу к делу.Проблема следующая как сохранить, а затем загрузить из битового потока(например файла) следующий код: class Base{...} class A:public Base { ... protected: Base* pObj;//Указатель на некоторый объект public: SetObj(Base* pBase) { //delete pObj; - просто закоментировано pObj = pBase; } Base* GetObj(){ return pObj;} ... };

class B:public A{...}

int main() { ... Base *pA = new A(new B()); Base *pB = new B(pA->GetObj()); ... //delete pB; //delete pA;

return 0; }

Вообщем необходимо сохранять ссылки(указатели в данном случае) на один и тот же объект, а потом корректно их загружать.С теоретической точки зрения нужно использовать smart pointer("умные" указатели), но вот с практической точки зрения как их реализовать?

P.S Требуется реализовать именно сохранение/загрузку т.к. в принципе умный указатель я написать могу. Укого какие идеи ?

anonymous

Проблема я так понимаю в том чтобы при востановлении знать что это за ссылка, т.е. проблема разименования. Так ? Ну с ходу, может сделать что-то типа протокола, тобишь заголовка, он будет определенной длины, в нем держать тип указателя, его длину и т.д. Будешь доставать из потока сначало заголовок, парсить его, и т.д.

nil5
()
Ответ на: комментарий от nil5

В основном проблема возникает именно при попытке загрузки одного объекта по двум ссылкам(т.е необходимо чтобы указатели указывали имеено на один а не на 2 как например при serialize(CArchive& ar) в MS VC++ 6.0 при сохранении сохраняется 2 ,а не один объект отсюда глюги при изменнении одно другой не меняется !) т.е проблема не в загрузке выгрузке как таковой а в загрузке выгрузке объекта на который ссылаются 2 указателя !!!

Всёравно спасибо за ответ !

anonymous
()
Ответ на: комментарий от anonymous

М-да

здесь тебе придётся пошевелить мозгой

Может тебе двойные (void**) указатели помогут??

А может тебе поможет доступ к обьектам не по указателю а по ключу???

cvv ★★★★★
()
Ответ на: комментарий от cvv

В принципе можно и по ключу(индексу) но 90% программы уже написано и переделывать всё по индексы(ключи) убъёт кучу времени + при удалении объекта(перемещении его) нужно будет обновлять индекс(ключ) а ссылок то уменя мягко сказать много.

anonymous
()

А нельзя перед сохранением обойти все объекты и пронумировать. Если нет циклических зависимостей, то можно будет записать в файл так, что бы при чтении, любой объект читался до ссылки на него. Если есть циклические зависимости, то придется сначала все считывать, а потом востанавливать указатели.

ival ★★
()
Ответ на: комментарий от ival

Вообще стуктура данных древовидная я подумаю над нумирацией а сейчас нужно уйти теперь только завтра буду. До завтра !

anonymous
()
Ответ на: комментарий от ival

Вариант. нумеровать не при сохранении, а при создании

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.