Когда вызывается оператор присвоения копии?

Когда я читал о конструкторе копирования и конструкторе назначения копирования, я понял, что оба передают свои свойства друг другу, и что оба они неявно объявляются компилятором (если он не определен). Таким образом, оба должны существовать независимо от того, делают ли они что-то полезное или нет.

Затем я проверил этот код:

#include <iostream>

using namespace std;

class Test {
public:
    Test () {
        cout << "Default constructor" << endl;
    }

    Test (const Test& empty) {
        cout << "Copy constructor" << endl;
    }

    Test& operator=(const Test& empty) {
        cout << "Copy assignment operator" << endl;
    }
private:

};

int main () {
    Test a;     // Test default constructor
    Test b (a); // Test copy constructor
    Test c = b; // Test copy assignment constructor
    system ("pause");
    return 0;
}

Но, похоже, оператор присваивания копии вообще не вызывается. Я пытался с тремя условиями:

  1. Все включено. Распечатывает:

    // Default constructor
    // Copy constructor
    // Copy constructor    # Why not prints out "Copy assignment operator"?
    
  2. Утилизировать оператор присваивания копии просто скопировать конструктор. Распечатывает:

    // Default constructor
    // Copy constructor
    // Copy constructor    # Why it's printed out even though I didn't define it?
    
  3. Без копирования конструктор просто скопировать оператор присваивания. Распечатывает:

    // Default constructor # Why "Copy assignment operator" is not printed out?
    
  4. Единственный конструктор. Распечатывает:

    // Default constructor # Understandable
    

Так что, как будто компилятору даже не важно, определяю я оператор копирования или нет. Ни в одном из четырех приведенных выше примеров не выводится "Оператор копирования". Так, когда это назвали, если это действительно существует и имеет значение?

1 ответ

Решение

Test c = b это инициализация, а не присвоение.

Если вы сделали это:

Test c;
c = b;

Тогда он вызвал бы оператор присваивания копии.

Другие вопросы по тегам