我尝试在 C++ 中实现 JSON 框架,并希望利用多态概念。我有一个类JSONNode
,它是一种存储其他 JSONNode 对象本身的容器,依此类推。我正在使用指针和动态分配来做到这一点。为了异常安全,我不想使用new/delete
但使用 boost 共享指针。将元素(进一步的 json 对象)添加到 json 对象的基本场景如下所示:
typedef boost::shared_ptr<JSONNode> JSONNodePtr;
void JSONNode::Add(JSONNodePtr nodePtr, const std::string& name)
{
this->elements[name] = nodePtr; // store in STL std::map
}
// create and add json object
JSONNodePtr obj(new JSONNode());
JSONNodePtr element(new JSONNode());
obj->Add(element, "firstElement");
为了更容易使用,我宁愿不显式分配element
并将共享指针的创建放入类方法中Add
:
void JSONNode::Add(JSONNode* node, const std::string& name)
{
JSONNodePtr nodePtr(node);
this->elements[name] = nodePtr;
}
// create and add json object
...
obj->Add(new JSONNode, "firstElement");
但这仍然是异常安全的吗?我猜不是因为共享指针的创建不是通过 JSONNode* 的分配立即完成的。你怎么看?还是有其他更常见的方法来实现这一点?