我很难搞清楚如何编写复制构造函数。正如您在下面所看到的,我们有一个类,其中嵌套了一个结构,用于链接节点以包含数据。我不能使用成员分配来复制DynIntStack,因为StackNode结构中的指针最终将指向同一个对象。
不幸的是,我无法弄清楚如何编写构造函数,以便它将新StackNode中的值设置为等于DynIntStack中传递构造函数的StackNode的值。
我理解我在这里尝试做什么,我只是无法弄清楚如何正确地写出来。
class DynIntStack
{
private:
// Structure for stack nodes
struct StackNode
{
int value; // Value in the node
StackNode *next; // Pointer to the next node
};
StackNode *top; // Pointer to the stack top
public:
// Constructor
DynIntStack()
{
top = NULL;
}
// copy constructor
DynIntStack(DynIntStack &obj)
{
DynIntStack::StackNode value = obj::StackNode.value;
DynIntStack::StackNode next = new StackNode;
}
答案 0 :(得分:0)
你做错了。您需要fully implement linked list类,然后复制DynIntStack
的构造函数,它将成为:
DynIntStack(DynIntStack &obj) : top(obj.top) {}
更好的方法是使用std::list
而不用担心。
答案 1 :(得分:0)
尝试以下
DynIntStack( DynIntStack &obj ) : top( nullptr )
{
StackNode **last = ⊤
for ( StackNode *current = obj.top; current; current = current->next )
{
*last = new StackNode { current->value, nullptr };
last = &( *last )->next;
}
}
如果您的编译器不支持这种形式的新运算符
*last = new StackNode { current->value, nullptr };
何时可以用语句替换
*last = new StackNode;
( *last )->value = current->value;
( *last )->next = nullptr; // or NULL
答案 2 :(得分:0)
我在这里看到的问题是复制构造函数中的value
和next
。您已为每个类型指定了一个类型,因此编译器会为每个单独实体从相同名称的成员数据中分配局部变量。超出范围时,正在设置,未使用和取消分配错误的内容。