Re[3]: Как хранить дерево?
От: Hemmul США  
Дата: 10.04.02 17:26
Оценка:
А>
А>class Vertex
А>{
А>  public:
А>  // .......
А>  private:
А>  //....... 
А>  std::vector<Vertex> * children;
А>};
А>

А>А затем сериализовать вектора и вершины;
А>Но когда я попробую считать(после неодной перезагрузки) я не смогу
А>восстановить структуру дерева т.к.
А>сохраненные указатели на детей уже
А>не будут таковыми(узлы ведь не будут
А>восстановлены в то же самое место в памяти,или я чегото не понимаю?)


Если наследовать все свои классы из CObject — то как раз восстановится структура дерева, указатели конечно по значению могут оказаться и другими, но указывать будут на "правильные" объекты.Об этом позаботится MFC.

Очень рекомендуемо почитать на RSDN статью "Сериализация в MFC".

http://rsdn.ru/article/?mfc/mfcseria.xml
Автор(ы): Джим Биверидж
Дата: 17.04.2001

В статье очень подробно рассматривается механизм сериализации, реализованный в MFC. Автор
дает полную информацию о работе макросов DECLARE/IMPLEMENT_DYNAMIC, DECLARE/IMPLEMENT_SERIAL
и DECLARE/IMPLEMENT_DYNCREATE. Также обсуждается поддержка версий схем сериализации.


В двух словах — есть если у вас есть скажем 2 объекта, в которых например хранятся указатели друг на друга — то после сохранения и востановления они конечно могут и изменится, но все равно будут указывать друг на друга.


И еще — скажем так

CTestClass *pClass1;
CTestClass *pClass2=pClass1;

.....

archive << pClass1;
archive << pClass2;

— тут запишется всего одна копия объекта — ибо он допрет что указатели ссылаюися на одно и тожу,
и когда потом вы напишете

archive >> pClass1;
archive >> pClass2;

то восстановится тоже 1 оюъект, и оба указателя будут указывать на него.



Саша.

P.S. гдето я это уже писал — попробуйте поиск.....

Саша.

vox clamantis in deserto
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.