← index
cplusplus17.Examples/features/move/move.cpp
Source: cplusplus17.Examples/features/move/move.cpp
#include<iostream>
#include<string>
#include<utility>

class User {
public:
    User() = default;
    User(std::string n) : name{n} {}
    ~User() = default;
    User(const User &u) : name {u.name} {
        std::cout << "** copy constructor \n";
    }
    User(User &&u) : name {std::move(u.name)} {
        std::cout << "** move cønstructor \n";
    }
    User &operator=(const User &u) {
        name = u.name;
        std::cout << "** operator = &\n";
        return *this;
    }
    User &operator=(User &&u) {
        std::cout << "** operator = &&\n";
        name = std::move(u.name);
        return *this;
    }
    std::string getName() && { return std::move(name); }
    const std::string &getName() const & { return name; }
protected:
    std::string name;
};

User newName(std::string name) {
    return User(name);
}

int main() {
    std::cout << newName("hello").getName() << "\n";
    for (char c : newName("test").getName()) {
        std::cout << c << "\n";
    }
    User u("test 1 2 3");
    std::cout << u.getName() << "\n";
    User u2 { std::move(u) };
    std::cout << u2.getName() << "\n";
    User u3;
    u3 = u2;
    std::cout << u3.getName() << "\n";
    u3 = User("test 1 3 3 4");
    std::cout << u3.getName() << "\n";
    return 0;
}