【发布时间】:2014-08-14 05:25:35
【问题描述】:
我使用 gsoap 为我的 Web 服务生成一些类,在破坏我的类时我没有看到任何免费或删除语句,我必须手动删除类的成员吗? ——或者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() { }
};
我看到了保持活动肥皂的教程,以便更快地调用 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对象了?
【问题讨论】:
-
没有正文回复,这意味着答案是否显而易见?对于我的问题的第 2 部分,如果我在完成后添加 calc.destroy,我会收到一些库问题消息。
-
通过 valgrind 或其他一些内存检查器运行它,看看您是否在泄漏内存,然后然后开始担心。 gsoap 是一场噩梦,对 C++ 不是很友好。
-
感谢您的评论,但 valgrind 只说可能不要删除:D,我不能肯定地说。我想在嵌入式系统中运行我的程序,所以我现在很担心:(
-
好吧,我没有看到
new与delete一起使用,所以我不确定delete应该属于哪里... -
gsoap 发送指向其函数的指针以创建一个类型,所以我认为它在其函数中是新的,所以我认为当我调用soap destroy 函数时,它可能会清理这个指针,但如果我调用,则在 SOAP_IO_KEEPALIVE破坏分段错误发生:(