C++でムーブコンストラクタとコピーコンストラクタの挙動の違いを知りたい
C++で右辺値参照、左辺値参照の基本的な動きを学ぼうとしています。
右辺値参照と左辺値参照の違いはムーブコンストラクタとコピーコンストラクタを明確に分離するものだと文献で読んだため、これらのコンストラクタの挙動を調べるためのサンプルコードを書いたのですが、挙動の違いが見られません。
該当のソースコード
#include <iostream> using namespace std; class A { public: int num = 0; A() { std::cout << "Constructor " << std::endl; } A(const A &a) { cout << "Copy Constructor " << std::endl; num=a.num; } A(A &&a) noexcept { std::cout << "Move Constructor " << std::endl; num=a.num; } ~A() { std::cout << "Destructor " << std::endl; } }; int main() { A a1; a1.num=1; A a2; a2.num=2; A b(a1); A c(move(a2)); cout << &a1.num << " " << a1.num << endl; cout << &a2.num << " " << a2.num << endl; cout << &b.num << " " << b.num << endl; cout << &c.num << " " << c.num << endl; a1.~A(); cout << "a1 delete" << endl; a2.~A(); cout << "a2 delete" << endl; cout << &b.num << " " << b.num << endl; cout << &c.num << " " << c.num << endl; return 0; // call destructor }
試したこと
a1というオブジェクトを作成しbにコピー、
a2というオブジェクトを作成しcにムーブするコードです。
コピーとムーブで何も違いが見られず、
どのように挙動の違いを確認すればよいのか、
根本的なことから誤解しているのかアドバイスをいただきたいです。
補足情報
g++のバージョンは下記です。
g++ (Ubuntu 9.3.0-10ubuntu2) 9.3.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。