Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с динамическими массивами. Правильное использование 
:(
    Опции темы
Arvest
Дата 8.4.2018, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 13.6.2007

Репутация: нет
Всего: нет



Приветствую.
Возникла необходимость в старый софт, написанный на С++ Builder, добавить работу с web-сервисом (SOAP).
Пришлось вспоминать С++ 
Через импорт WSDL получил модуль работы с web-сервисом.
В файле .h есть такой спецификатор:
Код

typedef DynamicArray<itemTO*>     itemListTO;  

/*Сам класс itemTO*/
class itemTO: public TRemotable {
private:
  __int64         FidHistory;
  bool            FidHistory_Specified;
  UnicodeString   Fsurname;
  bool            Fsurname_Specified;

...
public:
  __fastcall ~itemTO();
__published:
  __property __int64     idHistory = { index=(IS_OPTN | IS_UNQL), read=FidHistory, write=SetidHistory, stored = idHistory_Specified };
  __property UnicodeString    surname = { index=(IS_OPTN | IS_UNQL), read=Fsurname, write=Setsurname, stored = surname_Specified };

А также описание функции сервиса:
Код

virtual itemListTO      getData(const UnicodeString arg0, const UnicodeString arg1) = 0;

Как правильно работать с объектом itemListTO с точки зрения работы с памятью? Создать, удалить?
Сам вызов метода:
Код

void __fastcall TForm1::BitBtn1Click(TObject *Sender) {
try {
    _di_Service WebService = GetService(True, "", NULL);
    itemListTO data;
    data = WebService->getData("test_login","test_pass");
    for (int i = 0;i < data.Length ; i++)
    {
         Memo1->Lines->Add(data[i]->surname);
    }
    for (int i = 0;i < data.Length ; i++)
    {
         delete[] data[i];
    }
    WebService ->Release();
}

Заранее спасибо за советы.

Это сообщение отредактировал(а) Arvest - 8.4.2018, 13:37
PM MAIL   Вверх
Alexeis
Дата 8.4.2018, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 26
Всего: 459



Цитата(Arvest @  8.4.2018,  14:36 Найти цитируемый пост)
Как правильно работать с объектом itemListTO с точки зрения работы с памятью? Создать, удалить?

Оно работает примерно как и обычный вектор std::vector . Этот класс создан для совместимости с динамическими массивами Delphi.
Объект сам уничтожится когда выйдет за границу видимости, а вот что будет с элементами itemTO* вопрос. Указатели сами не освобождаются. Или у них есть постоянный владелец, который отвечает за удаление или нужно читать документацию. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Arvest
Дата 9.4.2018, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 13.6.2007

Репутация: нет
Всего: нет



Привожу сами файлы, полученные после импорта WSDL
В данных файлах: itemListTO = servListTO,  itemTO = servTO. В своем примере я переименовал их чтобы более наглядно было.


Присоединённый файл ( Кол-во скачиваний: 1 )
Присоединённый файл  Ident.cpp 13,92 Kb
PM MAIL   Вверх
Arvest
Дата 9.4.2018, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 13.6.2007

Репутация: нет
Всего: нет



Файл .h

Как я понимаю, все же правильно будет делать так:
Код

void __fastcall TForm1::BitBtn1Click(TObject *Sender) {
    try {
        _di_Ident WebIdent = GetIdent(True, "", NULL);

        if (!WebIdent) {
            ShowMessage("Объект _di_Ident WebIdent не создан");
            Application->Terminate();
        }
        identTO *ident = new identTO;
        servListTO data;
        data = WebIdent->getVmuData("test_login","test_pass", ident);
        for (int i = 0;i < data.Length ; i++)
        {
           Memo1->Lines->Add(data[i]->surname);
        }
        for (int i = 0;i < data.Length ; i++)
        {
           delete data[i];  // Удаляем объект servTO
        }
        delete ident; 
        WebIdent->Release();
    }
    catch (NS_Ident::Exception &ex) {
        Memo1->Lines->Add(ex.message);
    }
    catch (NS_Ident::Exception2 &ex) {
        Memo1->Lines->Add(ex.message);
    }
    catch (...) {
        Memo1->Lines->Add("Неизвестная ошибка");
    }
}


Это сообщение отредактировал(а) Arvest - 9.4.2018, 17:35

Присоединённый файл ( Кол-во скачиваний: 1 )
Присоединённый файл  Ident.h 26,70 Kb
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1056 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.