rapidjson设置字符串 深度复制

2016-07-21 21:07:00
admin
原创 2117
摘要:rapidjson设置字符串 深度复制

一、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循环遍历寻找元素,可能找到错误的元素;

发表评论
评论通过审核之后才会显示。