【发布时间】:2020-07-01 22:51:29
【问题描述】:
我有这段代码,我必须为它创建一个复制构造函数来创建传递对象的深层副本。我该如何创建它?
template<typename T>
class SSL {
struct Node {
T data;
Node* next;
};
Node* head = nullptr;
public:
// ...
};
【问题讨论】:
-
向我们展示您的尝试。
-
你真的要复制一个节点,包括指针吗?您将拥有两个具有相同指针的对象(即两个数据的链接指向同一个下一个节点)。
-
对于链表结构,您必须制作节点的新副本并重新链接它们,以便复制的节点独立于原始节点。
-
在任何地方使用
std::unique_ptr<Node>而不是Node*来帮助自动销毁。这也将使隐式定义的移动操作格式正确且正确,只留下复制操作供您实现。 -
我认为对于一个 SLL 对象中的所有节点,T 必须是相同的类型。那么,为什么不对同一类型的多个元素使用 STL 容器呢?
标签: c++ c++11 visual-c++ c++14