首页 > 解决方案 > C++ Builder:TJSONPair 是否拥有所有权?

问题描述

为了争论,让我们讨论这个代码片段:

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;

}

当我从函数返回时,我在尝试运行 TJSONObject 析构函数的 VCL 库中遇到访问冲突。

如果我删除删除配置语句,它运行良好。我怀疑 TJSONPair 正在获取 TJSONObject 的所有权并在 delete pair 语句中释放它。因此配置实例无效。

在另一个地方,我在创建 TJSONPair 实例之前克隆了 TJSONObject 实例,这使我能够继续访问并释放原始 TJSONObject 实例。因此支持 TJSONPair 声称拥有所有权的假设。

有人可以确认这一点,或者如果我排除删除配置语句,我会得到巨大的内存泄漏吗?

标签: jsonvclc++builder-10.3-rio

解决方案


是的,TJSONPair拥有所有权TJSONObject并将为您释放它。


推荐阅读