json - 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 声称拥有所有权的假设。
有人可以确认这一点,或者如果我排除删除配置语句,我会得到巨大的内存泄漏吗?
解决方案
是的,TJSONPair
拥有所有权TJSONObject
并将为您释放它。
推荐阅读
- visual-c++ - 使用 QuickFIX 在 VC++ MFC 应用程序中实现 SSL
- azure - 上传到 Azure DevOps 存储库的源代码是否静态加密?
- java - Java Wildfly POST 方法 multipart/form-data:“无法获取边界...”
- scala - JSON 格式的 Spark DataFrame 列上的隐式模式发现
- html - 引导卡不保持行列格式
- ios - 从经过训练的模型中获取更多数据
- powershell - 无法使用 DSC 添加 Windows 登录
- ruby-on-rails - 如何修复 ruby on rails 中的“rails generate scaffold”错误
- java - 如何避免基于递归迭代器从 LinkedList 中删除的 ConcurrentModificationException?
- c# - 绑定到 ItemsControl 的 ObservableCollection 中项目的不同行高,具体取决于数据类型