我使用 gsoap 为我的 Web 服务生成一些类,在破坏我的类时我没有看到任何 free 或 delete 语句,我必须手动删除类的成员吗? -- 或者 gsoup destroy 函数负责做那个? 这是我的示例类之一:
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() { }
};
我看到了保持活跃的 soap 教程,以便像这个例子一样更快地调用 web 服务
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;
现在我们不调用 soap 的 destroy 函数,所以我不必担心删除 soap 对象?
最佳答案
我使用 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++ 代码中使用类似这样的改编版,不是吗?
关于c++ - 如何在 C++ 模式下 gsoap 释放内存工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18017550/