我正在创建一个包含以下属性的堆栈,我正在尝试创建一个复制构造函数和赋值运算符,但我不能,因为新对象和旧对象指向相同的内存。请协助。
class Node
{
public:
Node(const T& data, Node* n = 0)
{
element = data;
next = n;
}
T element;
Node* next;
};
/* The top of the stack */
Node* top;
答案 0 :(得分:0)
对于复制构造函数,请执行
Node(const Node& data)
{
element = data.element;
next=new Node();
*next = *data.next;
}
答案 1 :(得分:0)
分配运算符:
Node& operator=(const Node& data) {
if (this != &other) { // to avoid self-assignment
element = data.element;
// allocate new memory
Node* tmp = new Node();
std::memcpy(tmp, data.next, sizeof(Node));
// deallocate old memory
delete next;
// assign new memory to object
next = new Node();
std::memcpy(next, tmp, sizeof(Node));
}
return *this;
}
考虑例外安全性。