Move Semantics
#include <iostream>
#include <cstring>
class MyString {
private:
char* data;
size_t length;
public:
// Constructor
MyString(const char* str) {
length = strlen(str);
data = new char[length + 1];
strcpy(data, str);
}
// Destructor
~MyString() {
delete[] data;
}
// Copy constructor
MyString(const MyString& other) {
length = other.length;
data = new char[length + 1];
strcpy(data, other.data);
std::cout << "Copy constructor called" << std::endl;
}
// Move constructor
MyString(MyString&& other) noexcept {
data = other.data;
length = other.length;
other.data = nullptr;
other.length = 0;
std::cout << "Move constructor called" << std::endl;
}
// Copy assignment operator
MyString& operator=(const MyString& other) {
if (this != &other) {
delete[] data;
length = other.length;
data = new char[length + 1];
strcpy(data, other.data);
}
std::cout << "Copy assignment called" << std::endl;
return *this;
}
// Move assignment operator
MyString& operator=(MyString&& other) noexcept {
if (this != &other) {
delete[] data;
data = other.data;
length = other.length;
other.data = nullptr;
other.length = 0;
}
std::cout << "Move assignment called" << std::endl;
return *this;
}
// Function to get string length
size_t size() const {
return length;
}
};
// Function that returns a MyString object
MyString createString() {
return MyString("Temporary String");
}
int main() {
MyString str1("Hello");
MyString str2 = str1; // Copy construction
MyString str3 = std::move(str1); // Move construction
MyString str4("World");
str4 = str2; // Copy assignment
str4 = createString(); // Move assignment
return 0;
}Last updated