Ниже приведен пример моей программы:
Когда я компилирую и запускаю следующую программу, я получаю вывод:
#include <iostream>
class A
{
public:
explicit A()
{
std::cout << "A CTOR\n" << std::flush;
}
~A()
{
std::cout << "A DTOR\n" << std::flush;
}
A(const A & a)
{
std::cout << "A DEEP COPY CTOR\n" << std::flush;
}
void operator = (const A & a)
{
std::cout << "A DEEP COPY = CTOR\n" << std::flush;
}
A(A && a)
{
std::cout << "A DEEP COPY MOVE CTOR\n" << std::flush;
}
void operator = (A && a)
{
std::cout << "A DEEP COPY MOVE = CTOR\n" << std::flush;
}
};
int main()
{
A a = A();
A b(A());
}
Скомпилируйте и запустите двоичный файл:
$ c++ -std=c++14 try47.cpp
A CTOR
A DTOR
Я ожидал, что будет вызван конструктор A по умолчанию, за которым следует копирование ctor в первой строке и перемещение ctor во вторую строку?Но этого, кажется, не происходит?Зачем?Я думаю, что мне здесь не хватает базового понимания?
Пожалуйста, уточните, когда будут называться CTOR?