rapidjson设置字符串 深度复制
- 2016-07-21 21:07:00
- admin
- 原创 2117
一、rapidjson设置字符串
1、SetValue、AddMember、PushBack不进行深度复制,除非带分配器参数进行调用;
2、rapidjson赋值时转移对象保证了高效,但是使用时产生的内存问题需要注意;
3、默认版本的内存分配器在整个分配器析构时释放内存;
void modifyString()
{
const char* json = "{\"project\":\"rapidjson\",\"stars\":10}";
Document d;
char *s;
d.Parse(json);
d["project"] = "json1";
cout << d["project"].GetString() << endl;
s = "json2";
d["project"].SetString(s, strlen(s));
cout << d["project"].GetString() << endl;
s = "json3";
d["project"].SetString(StringRef(s));
cout << d["project"].GetString() << endl;
}
二、rapidjson深度复制
void copyString()
{
Document doc;
Value str, copyDoc;
Document::AllocatorType &alloc = doc.GetAllocator();
char data[] = "feinen";
str.SetString(data, alloc);
doc.SetObject();
doc.AddMember("name", str, alloc);
copyDoc.CopyFrom(doc, alloc);
((char *)(doc["name"].GetString()))[0] = 'x';
cout << doc["name"].GetString() << endl;
cout << copyDoc["name"].GetString() << endl;
}
三、AddMemer和FindMemer函数
1、rapidjson内部是数组,AddMemer在末尾添加元素,不存在去重和失败;
2、FindMemer循环遍历寻找元素,可能找到错误的元素;