class MyClass {
public:
// Step 1: Destructor
~MyClass() {
// Release any resources, e.g., dynamic memory
delete[] data;
}
// Step 2: Copy Constructor
MyClass(const MyClass& other) {
// Create a new copy of the data
data = new int[other.size];
std::copy(other.data, other.data + other.size, data);
size = other.size;
}
// Step 3: Copy Assignment Operator
MyClass& operator=(const MyClass& other) {
// Check for self-assignment
if (this != &other) {
// Release existing resources
delete[] data;
// Create a new copy of the data
data = new int[other.size];
std::copy(other.data, other.data + other.size, data);
size = other.size;
}
return *this;
}
// Step 4: Move Constructor
MyClass(MyClass&& other) noexcept {
// Steal resources from the source object
data = other.data;
size = other.size;
// Reset the source object
other.data = nullptr;
other.size = 0;
}
// Step 5: Move Assignment Operator
MyClass& operator=(MyClass&& other) noexcept {
// Check for self-assignment
if (this != &other) {
// Release existing resources
delete[] data;
// Steal resources from the source object
data = other.data;
size = other.size;
// Reset the source object
other.data = nullptr;
other.size = 0;
}
return *this;
}
private:
int* data; // Example resource, e.g., dynamic memory
std::size_t size;
};