Куда-то пропадают данные по указателям
Суть в том, что я заполняю NetStrings, конструируя их из данных, полученных от структуры NETRESOURCE. Данные там каждый раз затираются потом, но string ведь создаёт объект как копию, верно? Значит, проблема не здесь.
Когда наступает пора посмотреть какие-то данные из выбранного узла дерева, я получаю его lParam, преобразую его в NetStrings и… вот тут-то начинается самое интересное. Куда-то пропадают данные! То неверные указатели там, то ещё какая-то байда. Причём, если я при заполнении обращу внимание на какой-то lParam, который будет иметь значение 123456, например, то при попытке запросить данные в WM_NOTIFY он будет иметь то же самое значение, но там будет уже совсем не то, что я ожидал.
В чём причина такого странного поведения и как мне её исправить? Не хочется переписывать всё так, чтобы приходилось в дереве структур искать по HTREEITEM выделенного элемента.
А где вызываются конструкторы NetStrings.Provider, NetStrings.LocalName и NetStrings.Comment?
В EnumSubtree() они инициализируются, т.е. не будет такого, чтобы в push_back() попала NetStrings с неинициализированными членами (а даже если и так, то по умолчанию там пустые строки). Ну и суть-то не в этом — если посмотреть TreeItems, то там всё будет проинициализировано, ВСЁ! А указатели в lParam всё равно в какую-то байду превращаются…
Вот финальная версия. Я просто уже не знаю, что делать — пока сохраняю, по адресам всё нормально доступно, да и векторы я не тереблю. Но стоит попытться получить сохранённое значение по указателю…
Код:
NetStrings *ns=(NetStrings*)nmtv.itemNew.lParam;
SetDlgItemText(hDlg,LblProvider,("Провайдер: "+ns->Provider).c_str());
SetDlgItemText(hDlg,LblProvider,("Провайдер: "+ns->Provider).c_str());
вы-же ns не создали. NetStrings ведь класс, а не POD структура. Или я что-то не вижу.. Сильно не вникал.
Да я уже разобрался, непонятно только, в чём дело было :D Переписал через forward_list и ещё кое-что изменил. А члены там нормально возвращаются, это же указатель на существующий объект.