move构造函数只影响class的指针成员指向的内存space吗?

Does move constructor only affect the memory space pointed to by the pointer member of the class?

例如,这段代码:

struct President  
{  
    std::string name;  
    std::string country;  
    int year;  

    President(std::string p_name, std::string p_country, int p_year)  
        : name(std::move(p_name)), country(std::move(p_country)), year(p_year)  
    {  
        std::cout << "--constructed\n";  
    }
    /*
    President(const President& other)
        : name(std::move(other.name)), country(std::move(other.country)), year(other.year)
    */
    President(const President& other)
        : name(other.name), country(other.country), year(other.year)
    {
        std::cout << "--copy constructed\n";
    }
    President(President&& other)  
        : name(std::move(other.name)), country(std::move(other.country)), year(other.year)  
    {
        std::cout << "--moved\n";  
    }  
    ~President()
    {  
        cout << "\n"<< &name << " " << country << endl;
        std::cout << "--destruct\n";  
    }
    President& operator=(const President& other);  
};

无论是移动构造函数还是拷贝构造函数,它们都会导致三个数据成员的值存储在新内存中,旧内存会被释放。

我的意思对吗?

And my meaning is right?

抱歉,没有。您的移动构造函数将按照您的描述工作,因为它将 'steal' 来自 othernamecountry 成员变量的内容,但复制构造函数不会。 std::moveconst 对象没有任何作用,您应该将其从复制构造函数中删除。毕竟,操作词是 copy,对吧?

值得注意的是,您根本不需要在此处编写自己的副本或移动构造函数 ('rule of zero')。编译器合成的默认构造函数可以正常工作。哦,std::move 在诸如 int 的基本类型上也什么都不做——无论你是否包含变量,它都会被复制。