class LinkedList
{
public:
LinkedList() : _head(nullptr) {}
LinkedList(ListElement *newElement) : _head(newElement) {}
~LinkedList() { };
LinkedList(const LinkedList& LL);
LinkedList& operator=(LinkedList byValLinkedList);
private:
ListElement *_head;
}
LinkedList::LinkedList(const LinkedList & LL)
{
ListElement *curr = LL._head;
// If Linked List is empty
if (isEmpty() && curr != nullptr) {
_head = new ListElement(curr->getValue());
curr = curr->getNext();
}
ListElement *newNode = nullptr;
while (curr) {
newNode = new ListElement(curr->getValue());
curr = curr->getNext();
}
}
LinkedList& LinkedList::operator=(LinkedList byValLinkedList)
{
std::swap(_head, byValLinkedList._head);
return *this;
}
int main() {
using namespace std;
LinkedList LL1(new ListElement(7));
//..... some insertions
LinkedList LL2(new ListElement(5));
//..... some insertions
LL1 = LL2; // What is the order ?
// ..... do something else
return 0;
}
LL1 = LL2は、1つが呼び出されると想定され、実行されます。コピー割り当ての前にコピーコンストラクタが呼び出されているのはなぜですか?
コピー割り当てが行われることを期待しています。しかし、コード、次の順序
- で実行されたコピーコンストラクタ
- コピーAssignemnt
- デストラクタ
は私が間違って何をしているのですか?デストラクタはなぜ呼ばれたのですか?
、私は「あなたが実際に見てみたいことがあります推測すると思います。非常に広範ここにコピーおよびスワップイディオムの説明があります
コンストラクターの移動 "と"割り当ての移動 "を行います。 –