#include <iostream>
class SomeClass {
public:
SomeClass()
{
std::cout << "SomeClass()" << std::endl;
}
SomeClass(const SomeClass& other)
{
std::cout << "SomeClass(const SomeClass& other)" << std::endl;
}
SomeClass(SomeClass&& other)
{
std::cout << "SomeClass(SomeClass&& other)" << std::endl;
}
SomeClass& operator=(const SomeClass& other)
{
std::cout << "SomeClass& operator=(const SomeClass& other)" << std::endl;
}
SomeClass& operator=(SomeClass&& other)
{
std::cout << "SomeClass& operator=(SomeClass&& other)" << std::endl;
}
~SomeClass()
{
std::cout << "~SomeClass()" << std::endl;
}
};
int main()
{
std::cout << "1" << std::endl;
SomeClass c1; // default constructor
std::cout << "2" << std::endl;
SomeClass c2(c1); // copy constructor
std::cout << "3" << std::endl;
SomeClass c3 = c2; // default constructor and copy assignment operator or just copy constructor
std::cout << "4" << std::endl;
c1 = c2; // copy assignment operator
std::cout << "5" << std::endl;
SomeClass c4(std::move(c3)); // move constructor
std::cout << "6" << std::endl;
c4 = std::move(c1); // move assignment operator
return 0;
}