2013-08-02 1 views
2

Я использую gsoap для генерации некоторого класса для моего веб-сервиса, в разрушении моего класса i havent вижу какой-либо оператор free или delete, должен ли я удалить член класса manualy? - Или функция gsoup destroy несет ответственность за это? это один из моих образцов classess:Как работать с памятью релиза в режиме C++?

class SOAP_CMAC ns2__FirstOfflineReserve 
{ 
public: 
    short *consumed; /* optional element of type xsd:short */ 
    class ns2__FirstOfflineFood *food; /* optional element of type ns2:FirstOfflineFood */ 
    class ns2__FirstOfflineFoodType *foodType; /* optional element of type ns2:FirstOfflineFoodType */ 
    int *id; /* optional element of type xsd:int */ 
    class ns2__FirstOfflineMeal *meal; /* optional element of type ns2:FirstOfflineMeal */ 
    short *remainCount; /* optional element of type xsd:short */ 
    short *selectedCount; /* optional element of type xsd:short */ 
    std::string *serialCard; /* optional element of type xsd:string */ 
    std::string *username; /* optional element of type xsd:string */ 
    struct soap *soap; /* transient */ 
public: 
    virtual int soap_type() const { return 36; } /* = unique id SOAP_TYPE_ns2__FirstOfflineReserve */ 
    virtual void soap_default(struct soap*); 
    virtual void soap_serialize(struct soap*) const; 
    virtual int soap_put(struct soap*, const char*, const char*) const; 
    virtual int soap_out(struct soap*, const char*, int, const char*) const; 
    virtual void *soap_get(struct soap*, const char*, const char*); 
    virtual void *soap_in(struct soap*, const char*, const char*); 
      ns2__FirstOfflineReserve() { ns2__FirstOfflineReserve::soap_default(NULL); } 
    virtual ~ns2__FirstOfflineReserve() { } 
}; 

и я вижу учебник для хранения живой мыло для быстрого вызова на веб-сервиса как в этом примере

calcProxy calc(SOAP_IO_KEEPALIVE); // keep-alive improves connection performance 
    double sum = 0.0; 
    double val[] = 5.0, 3.5, 7.1, 1.2 ; 
    for (int i = 0; i < 4; i++) 
     if (calc.add(sum, val[i], sum)) 
     return calc.error; 
    std::cout << "Sum = " << sum << std::endl; 
    return 0; 

Теперь мы не называем уничтожить функцию мыла, поэтому я havent нужно беспокоиться за удаление мыльного объекта?

+0

нет ответа тела, так что это ответ означает очевидный или нет? для части 2 моего вопроса, если я добавлю calc.destroy после окончания, у меня есть сообщение о проблеме с библиотекой. –

+0

Запустите его через valgrind или какую-нибудь другую программу проверки памяти, чтобы увидеть, есть ли у вас утечка памяти и * затем * начать беспокоиться. gsoap - это кошмар и на самом деле не очень дружелюбен к C++. – trojanfoe

+0

спасибо за ваш комментарий, но valgrind только сказать, вероятно, не удалять: D, я не могу сказать точно. Я хочу запустить свою программу во встроенной системе, так что теперь я волнуюсь :( –

ответ

1

Я использовал gsoap сгенерированные файлы в качестве компонентов .dll проекта, где в секции ввода .dll я использовал следующее:

int __stdcall DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) 
{ 
    switch (fdwReason) 
    { 
     case DLL_PROCESS_ATTACH: 

      /* create a soap environment (provides soap services) */ 
      soap = soap_new(); 

      break; 
     case DLL_PROCESS_DETACH: 

     /* terminate soap services */ 
     soap_end(soap); //discontinue soap services 
     soap_free(soap); //free soap resources 

     break; 
    } 

    /* Return 1 to indicate successful initialization */ 
    return 1; 
} 

результаты такого подхода в каких-либо утечек памяти для меня. Вы могли бы использовать адаптацию чего-то подобного в вашем коде на C++, не так ли?