Я пытался создать конструктор для дерева. Я нашел немало советов.Что случилось с этим конструктором копирования?
Это меня заинтересовало.
class TreeNode
{
int ascii;
TreeNode* left;
TreeNode* right;
public:
TreeNode() { ascii = 0; left = right = 0; }
TreeNode* clone();
// ...
};
TreeNode* TreeNode::clone()
{
if (TreeNode* tmp = new TreeNode)
{
tmp->ascii = ascii;
if (left) tmp->left = left->clone();
if (right) tmp->right = right->clone();
return tmp;
}
return 0;
}
Что "if (TreeNode* tmp = new TreeNode)
означает?
Другое, чем это выглядит хорошо. Это просто не работает очень хорошо.
Любая идея, что случилось с ним?
В примере выше было получено от this.
Оператор 'if' проверяет, что распределение выполнено успешно, поскольку с момента появления исключений больше не требуется в C++. Смотрите: http://www.freshsources.com/Except2/ALLISON.HTM –
Обратите внимание, что конструктор копирования для вашего класса будет иметь подпись типа «TreeNode (const TreeNode & source)», и вы будете работать непосредственно над новым объектом , как и в любом другом конструкторе. См. Ответ Джона. –
Это тоже выглядит хорошо. В какой моде он работает не очень хорошо? Как указывали другие, это реализует метод клонирования, а не конструктор копирования. Это проблема? Вы пытаетесь использовать класс, как если бы у него был конструктор копирования? Он имеет значение по умолчанию, а значение по умолчанию для этого класса неверно. – Omnifarious