在复制构造函数中设置嵌套在 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
我在这里看到的问题是复制构造函数中的 value
和 next
。您已经为每个指定了一个类型,因此编译器从同名成员数据中为每个 separate entities 分配局部变量。超出范围时设置、未使用和释放错误的内容。
我在弄清楚如何编写复制构造函数时遇到了麻烦。正如您在下面看到的,我们有一个 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
我在这里看到的问题是复制构造函数中的 value
和 next
。您已经为每个指定了一个类型,因此编译器从同名成员数据中为每个 separate entities 分配局部变量。超出范围时设置、未使用和释放错误的内容。