1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

C++ ムーブコンストラクタとムーブ代入演算子

Last updated at Posted at 2020-06-04

「コピーコンストラクタ&代入演算子」と「ムーブコンストラクタ&ムーブ代入演算子」を区別できるようになったので、感動のあまりメモします。

  • ムーブコンストラクタがあるとSTLコンテナのpush_backstd::moveで譲渡によるコピーと想定外のデストラクタ呼び出し回避が可能です。
  • コピーコンストラクタ(const参照のコピーコンストラクタ)はコピーのコストがありますが、ムーブコンストラクタはありません。
C++の特別なコンストラクタ 構文 概要
デフォルトコンストラクタ Class() 引数なし。
コピーコンストラクタ(const参照) Class(const Class& r) 元のオブジェクトは変更されないのでconst
ムーブコンストラクタ Class(Class&& r) 元のオブジェクトは移譲されるので非const。初期化時にstd::moveを与えることで呼び出せる。
C++の代入演算子オーバーロード 構文 概要
(コピー)代入演算子(const参照) Class& operator=(const Class& r) 元のオブジェクトは変更されないのでconst
ムーブ代入演算子 Class& operator=(Class&& r) 元のオブジェクトは移譲されるので非const

より詳しく分かりやすい情報源:
右辺値参照・ムーブセマンティクス - cpprefjp C++日本語リファレンス

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?