【发布时间】:2010-11-03 15:03:21
【问题描述】:
我有以下类定义,它需要一个复制构造函数,以便进行深度复制以复制原始指针。任何人都可以建议如何最好地做到这一点?
对 XML 使用 xerces-c++
class XMLDocument
{
private:
typedef std::vector<XML::XMLNode> v_nodes;
public:
XMLDocument::XMLDocument();
XMLDocument::XMLDocument(const XMLDocument& copy);
XMLDocument::~XMLDocument();
XMLDocument& operator=(XMLDocument const& rhs);
void CreateDocument(const std::string& docname);
void AddChildNode(XMLNode& node);
void RemoveNode(XMLNode& node);
void AddNodeValue(XMLNode& node, const std::string& value);
void AddNodeValue(XMLNode& node, int value);
void AddNodeValue(XMLNode& node, double value);
void AddNodeValue(XMLNode& node, float value);
std::string GetXMLAttributes();
std::string GetXMLAttribute(const std::string& attrib);
std::string GetXMLNodeText(XML::XMLNode& node);
std::string DumpToString();
XMLNode GetXPathNode(const std::string xpathXpression);
XMLNode GetNode(const XMLNode ¤tnode);
typedef v_nodes::iterator nodes_iterator;
nodes_iterator begin()
{
nodes_iterator iter;
iter = xmlnodes.begin();
return iter;
}
nodes_iterator end()
{
nodes_iterator iter;
iter = xmlnodes.end();
return iter;
}
private:
v_nodes xmlnodes;
bool InitializeXML();
DOMImplementation* impl; //Abstract
DOMDocument* document; //Abstract
DOMElement* rootelement; //Abstract
};
DOMDocument 是调用函数创建的,也是 DOMElement。所以我不能只在这些指针上调用 new。
不确定我是否只是从字面上重新创建所有这些对象?
例子:
document = impl->createDocument(0, "mydoc", 0);
谁投了反对票却没有给出理由???
【问题讨论】:
-
你可能应该在你的问题中提到你正在使用这个而不是你自己的类:xerces.apache.org/xerces-c/apiDocs-3/…
-
有问题的类是否有某种 clone() 接口?如果没有,如果你想复制对象层次结构,你可能是 SOL(这意味着你必须手动完成,要么自己遍历节点,要么以某种方式序列化和反序列化文档)
-
我看不到克隆,SOL是什么意思?
-
请注意,自从我使用它已经有几年了...当心 Xerces 的内存泄漏,并非常小心如何使用它。我怀疑缺少的复制构造函数与内存泄漏有关。
标签: c++ copy-constructor