说我有一个结构:

struct TrieNode {
const NumChars = 26;
bool isWord;
int letterCount;
TrieNode *letters[NumChars];

TrieNode() {
    isWord = false;
    for ( int i = 0; i < NumChars; i += 1 ) {
        letters[i] = NULL;
    } // for
    letterCount = 0;
 }
};

我在堆上这样创建一个TrieNode:
TrieNode *root = new TrieNode();

现在如何创建根的其他副本? (深复制)

最佳答案

在C++中,您可以通过定义自定义的“复制构造函数”来实现。格式为:

TrieNode(const TrieNode& copyFrom){
  //Do the copying here
}

然后,您可以随时使用此功能:
TrieNode example;
TrieNode deep(example);
TrieNode deep2 = example;

如果要定义复制构造函数,则还可能需要定义一个析构函数和一个赋值运算符。这称为Rule of 3

如果实现赋值运算符(=),则还可以编写如下代码:
TrieNode example;
TrieNode deep;
//Do stuff
deep = example; //Still a deep copy.

关于c++ - struct C++的深层拷贝,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13148053/

10-14 02:43