C++ Builder:TJSONPair 是否拥有所有权?
C++ Builder: Does TJSONPair take ownership?
为了争论,让我们讨论这个代码片段:
void GetConfig(void) {
String RawData;
String s = SendAPI("config");
TJSONObject *config = new TJSONObject();
config->Parse(s.BytesOf(),0);
TJSONPair *pair = new TJSONPair("",config);
RawData = JSONToFormatted(pair,0);
delete pair;
delete config;
}
当我从函数中 return 时,我在试图 运行 TJSONObject 析构函数的 VCL 库中遇到访问冲突。
如果我删除 delete config 语句,运行 没问题。我怀疑 TJSONPair 正在获取 TJSONObject 的所有权并在删除对语句中释放它。因此配置实例无效。
在另一个地方,我在创建 TJSONPair 实例之前克隆了 TJSONObject 实例,这使我可以继续访问并释放原始 TJSONObject 实例。从而支持TJSONPair声称所有权的假设。
有人可以证实这一点吗,或者如果我排除 delete config 语句会导致巨大的内存泄漏吗?
是的,TJSONPair
取得了 TJSONObject
的所有权,并将免费为您提供。
为了争论,让我们讨论这个代码片段:
void GetConfig(void) {
String RawData;
String s = SendAPI("config");
TJSONObject *config = new TJSONObject();
config->Parse(s.BytesOf(),0);
TJSONPair *pair = new TJSONPair("",config);
RawData = JSONToFormatted(pair,0);
delete pair;
delete config;
}
当我从函数中 return 时,我在试图 运行 TJSONObject 析构函数的 VCL 库中遇到访问冲突。
如果我删除 delete config 语句,运行 没问题。我怀疑 TJSONPair 正在获取 TJSONObject 的所有权并在删除对语句中释放它。因此配置实例无效。
在另一个地方,我在创建 TJSONPair 实例之前克隆了 TJSONObject 实例,这使我可以继续访问并释放原始 TJSONObject 实例。从而支持TJSONPair声称所有权的假设。
有人可以证实这一点吗,或者如果我排除 delete config 语句会导致巨大的内存泄漏吗?
是的,TJSONPair
取得了 TJSONObject
的所有权,并将免费为您提供。