【发布时间】:2013-06-09 02:33:40
【问题描述】:
我正在实现一个链表。我写了一个拷贝构造函数:
// --- copy constructor ---
IntList(const IntList& last_list) {
first = new IntNode(last_list.getFirst()->getData());
cout << "copy first " << first->getData() << endl;
IntNode* last_node = first;
IntNode* node = last_list.getFirst()->getNext();
while(node!=NULL) {
IntNode* new_node = new IntNode(node->getData());
last_node->setNext(new_node);
cout << "copy " << new_node->getData()<< endl;
last_node = new_node;
node = node->getNext();
}
}
据我了解,我的复制赋值运算符 (operator=) 应该有 2 个目标:
- 删除当前列表。
- 复制新列表。
我可以通过调用我已经编写的析构函数然后调用复制构造函数来实现这两个目标。我该怎么做?
【问题讨论】:
-
什么是赋值构造函数?
-
你的意思是它的复制赋值运算符。而且 AFAIK,您不能根据复制构造函数来定义它。
-
@MikeVine:当然可以。复制 assignemtn 的常见复制和交换通过复制构造函数工作
-
我看到你已经编辑了你的帖子,但我括号的重点不是用“copy-assignment”替换“assignment”,而是用“operator”替换“constructor”...... (此外,“复制赋值运算符”通常简称为“赋值运算符”。“复制”前缀只是增加了精度:例如对于
std::string,string& operator=(const string&)和string& operator=(const char*)都是赋值运算符,但只有第一个是一个 copy 赋值运算符,因为参数与类的类型相同。它与构造函数和 copy 构造函数是平行的。)
标签: c++ destructor copy-constructor assignment-operator