#include <iostream>
class SomeClass {
int someField;
public:
// DefaultConstructor
SomeClass() : someField{0} {
std::cout << "DefaultConstructor invoked\n";
}
// CopyConstructor
SomeClass(const SomeClass& other) {
std::cout << "CopyConstructor invoked\n";
this->someField = other.someField;
}
// MoveConstructor
SomeClass(SomeClass&& other) {
std::cout << "MoveConstructor invoked\n";
this->someField = std::move(other.someField);
}
};
class CompositeClass {
SomeClass someClassInstance;
public:
CompositeClass(SomeClass&& other) : someClassInstance(other) {}
// LOOK HERE!!!!
// Comment the line above and uncomment the line below to see the difference.
// CompositeClass(SomeClass&& other) : someClassInstance(std::move(other)) {}
};
// Type your code here, or load an example.
int main() {
SomeClass someClassInstance{};
CompositeClass ccInstance(std::move(someClassInstance));
return 0;
}