デフォルトムーブコンストラクタでムーブした時の基本型メンバ変数の挙動を確認する【C++】

確認した環境

本題

C++ のムーブコンストラクタはデフォルトが用意されていますが、 int などの基本型がどのようになるのかを実際に動かして確認しました。 ムーブコンストラクタがちゃんと呼ばれていることを確かめるために、 string や unique_ptr もメンバーに含めてこれらが空になるかも確認します。 以下のソースコードで確認したところ、ムーブ元(下記ソースコードのa)のint や生ポインタはムーブ前後で同じ値でした。

ソースコード

#include <iostream>
#include <memory>
#include <sstream>


class MyClass {
public:
    MyClass(int n) {
        int_ = n;
        ptr_ = &int_;
        unique_ptr_ = std::make_unique<int>(n);
        std::stringstream ss;
        ss << n;
        string_ = ss.str();
    }

    MyClass(MyClass&&) = default;

    void print() {
        std::cout << "int : " << int_ << std::endl;
        std::cout << "&int : " << &int_ << std::endl;
        std::cout << "ptr : " << ptr_ << std::endl;
        std::cout << "unique_ptr_.get() : " << unique_ptr_.get() << std::endl;
        std::cout << "string : " << string_ << std::endl;
        std::cout << std::endl;
    }
private:
    int int_;
    int *ptr_;
    std::unique_ptr<int> unique_ptr_;
    std::string string_;
};

int main() {
    MyClass a(10);
    std::cout << "------------ A ------------" << std::endl;
    a.print();

    MyClass b(std::move(a));
    std::cout << "------------ A ------------" << std::endl;
    a.print();
    std::cout << "------------ B ------------" << std::endl;
    b.print();

    return 0;
}

結果(Visual Studio 2019)

------------ A ------------
int : 10
&int : 0000005D7FAFF838
ptr : 0000005D7FAFF838
unique_ptr_.get() : 0000021012701B10
string : 10

------------ A ------------
int : 10
&int : 0000005D7FAFF838
ptr : 0000005D7FAFF838
unique_ptr_.get() : 0000000000000000
string :

------------ B ------------
int : 10
&int : 0000005D7FAFF870
ptr : 0000005D7FAFF838
unique_ptr_.get() : 0000021012701B10
string : 10

結果(Wandbox)

https://wandbox.org/permlink/7TJKbZEAO8tMQ3nv