【发布时间】:2020-11-13 13:22:20
【问题描述】:
我有一个简单的 LinkedList 类,带有基本操作(添加/删除等)和一个复制构造函数:
LinkedList::LinkedList(const LinkedList& other) {
data_ = other.data_;
if (other.next_ == nullptr) next_ = nullptr;
else next_ = new LinkedList(*other.next_);
}
我认为以下行为是预期的,但我不确定为什么......
int main() {
LinkedList list1;
list1.insert(1);
list1.insert(2);
// prints 1->2
list1.print();
// Copy constructor called
LinkedList list2(list1);
list1.insert(3);
// prints 1->2->3
list1.print();
// prints 1->2
list2.print();
// Memory addresses are different
cout << &list1 << " " << &list2 << endl;
delete &list1;
// Nothing printed
list2.print();
}
list1被删除的时候是不是也要删除list2的引用?
【问题讨论】:
-
delete &list1;是非法的,因为你没有(也不应该)LinkedList* list1 = new LinkedList;
标签: c++ copy-constructor deep-copy