在复制构造函数中设置嵌套在 class 内的结构变量

Set struct variable nested inside a class in a copy constructor

我在弄清楚如何编写复制构造函数时遇到了麻烦。正如您在下面看到的,我们有一个 class ,其中嵌套了一个结构,用于链接节点包含数据。我不能使用成员赋值来复制 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;
    }

你做错了。您需要 fully implement your linked list class 然后在复制 DynIntStack 的构造函数时它将变为:

DynIntStack(DynIntStack &obj) : top(obj.top) {}

更好的是只使用 std::list 而不用担心它。

尝试以下方法

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; 
    } 
}

如果你的编译器不支持这种形式的new运算符

*last = new StackNode { current->value, nullptr };

何时可以用语句替换它

*last = new StackNode;
( *last )->value = current->value;
( *last )->next = nullptr; // or NULL

我在这里看到的问题是复制构造函数中的 valuenext。您已经为每个指定了一个类型,因此编译器从同名成员数据中为每个 separate entities 分配局部变量。超出范围时设置、未使用和释放错误的内容。