MainForm->ControlList1->Invalidate()如果我从事件调用TIdUDPServer::>OnUDPRead,它是线程安全的吗,或者我仍然需要使用TThread::Synchronize()或TThread::Queue()?
主页
/
user-19648893
JKofsky's questions
JKofsky
Asked:
2024-12-10 04:04:41 +0800 CST
我正在尝试在 C++Builder 中运行 JSON。我一直在查看用于创建 JSON 文件的 Delphi 代码,它们似乎都创建了 JSON 文件/字符串的 Doc 和 Data 部分,但只释放了 Doc。
例如:
void __fastcall TMainForm::Panel1Click(TObject* Sender)
{
std::unique_ptr<TJSONObject> jsonDoc { new TJSONObject() };
TJSONObject* jsonData = new TJSONObject();
jsonDoc->AddPair("cmd", rdsNowPlaying);
jsonDoc->AddPair("station", "WBCB_FM");
jsonDoc->AddPair("data", jsonData);
jsonData->AddPair("testNull", new TJSONNull() );
jsonData->AddPair("testTrue", new TJSONBool(true) );
jsonData->AddPair("testFalse", new TJSONBool(false) );
Memo1->Lines->Text = jsonDoc->Format(3);
}
是否将jsonDoc->AddPair("data", jsonData);的“所有权”赋予?那么,当被释放时,也被释放了吗?jsonDatajsonDocjsonDocjsonData
是否将jsonData->AddPair("testTrue", new TJSONBool(true) );的所有权分配给并且何时释放它?TJSONBooljsonDatajsonData
触发OnClick事件显示正确,但这是另一个“如何释放(删除)内存”问题?还是std::unique_ptr它TJSONObject自己就能搞定?
psrdsNowPlaying是enum在标题中声明的。
JKofsky
Asked:
2024-12-04 05:58:23 +0800 CST
我需要一个对象级变量(TIniFile* ini)。过去,代码示例和/或惯例将是new/delete对象,如下所示:
主程序
...
private:
TIniFile* ini;
...
constructor
...
ini = new TiniFile(fileName);
...
析构函数
...
delete ini;
...
我已经看到很多关于使用std::unique_ptr()替代方法的信息。这是否能实现我所想的功能:在释放对象时自动释放内存?
frmMain.h
#include <memory>
...
private:
std:unique_ptr<TIniFile> ini;
...
constructor
...
ini = make_unique<TiniFile>(fileName);
...
没有析构函数