C ++ Copy构造函数和赋值运算符

时间:2014-02-16 20:05:07

标签: c++

我正在创建一个包含以下属性的堆栈,我正在尝试创建一个复制构造函数和赋值运算符,但我不能,因为新对象和旧对象指向相同的内存。请协助。

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;

2 个答案:

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

考虑例外安全性。