問題タブ [rvalue-reference]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
346 参照

c++11 - ムーブ代入の場合、破壊が右辺値に残されていると、メモリリークが発生しますか?

このMSDNの記事を参照すると、最後に(セクション:ロバストプログラミング)、次のように記載されています。

リソースリークを防ぐために、ムーブ代入演算子で常にリソース(メモリ、ファイルハンドル、ソケットなど)を解放してください。

代わりにムーブ代入が次のように実装された場合はどうなりますか。

「他の」参照の右辺値の「_data」は、スコープ外になると解放されませんか?

0 投票する
2 に答える
3207 参照

c++ - C++11 - 右辺値ポインターの区別

変数をコンパイラで構築された文字列として区別するにはどうすればよいですか?

たとえば、右辺値"Hello, World"の型はconst char*. const char*それ自体は、ポインターを変更できないという意味ではありません。ポインターを変更するchar* constことはできませんが、それはコンパイラーによって構築されるものではありません。

これは、 を保持するコンテナconst char*の場合、C++ の移動セマンティクス以外の方法でデータをコピーする必要があるということですか? コンパイラで構築された文字列を移動し、他のすべての文字列をそのままにしておく方法はありますか?

たとえば、GCC 4.5.2 では、 ではintなく型を返すメソッドは、 を返すint&ものとして扱われint&&ます。実際の標準がこのようになっているかどうかはわかりませんが、GCC が当分の間そうしていることです。

編集:明確にするために、ポインタが指す実際のメモリをコピーする必要があることを意味します。これは、新しいメモリを割り当てる必要があり、ポインターからのデータを新しい場所にコピーする必要があることを意味します。

0 投票する
1 に答える
1898 参照

c++ - multimap::emplace() と move() とは?

multimap に関する MSDN ドキュメントを表示していたところ、メンバー関数 multimap::emplace() があることがわかりました。以下は、そのメンバー関数の例です。

emplace()move()は C++0x のようです。誰かが私のためにそれらを説明できますか? について読みましmove()たが、それが何をするのか(ボンネットの下で)本当にわかりません。

0 投票する
4 に答える
271171 参照

c++ - C ++ 11でのT&&(ダブルアンパサンド)とはどういう意味ですか?

私はC++11の新機能のいくつかを調べてきましたが、気付いたのは、のような変数を宣言する際の2つのアンパサンドですT&& var

まず、この獣は何と呼ばれていますか?Googleがこのような句読点の検索を許可してくれることを願っています。

正確にはどういう意味ですか?

一見、ダブルリファレンス(CスタイルのダブルポインタのようにT** var)のように見えますが、そのユースケースを考えるのに苦労しています。

0 投票する
1 に答える
668 参照

c++11 - C ++ 0x右辺値参照の前方定義でIDを使用するのはなぜですか?

右辺値参照の簡単な紹介ではforward、次のように定義されています。

identityクラスはどのような目的を果たしますか?なぜだめですか:

0 投票する
2 に答える
2375 参照

c++ - move セマンティクス std::move 使用方法

このコードがコンパイルされないのはなぜですか?

エラー C2440: 'return': 'int &&' の 'int' を変換できません

0 投票する
2 に答える
3840 参照

c++ - 右辺値参照パラメーターとテンプレート関数

右辺値参照パラメーターを受け入れる関数を定義すると、次のようになります。

GCC 4.5 を使用してa、 、ar、またはのいずれかで呼び出すことができarrます。

ただし、同様の非テンプレート関数を呼び出すと、

これら 3 つの引数のいずれを使用しても失敗します。の知識を強化する準備をしていたのforwardですが、これでコースから外れてしまいました。おそらくそれは GCC 4.5 です。A Brief Introduction to Rvalue Referencesの最初の例でもコンパイル エラーが発生することに驚きました。

0 投票する
2 に答える
11445 参照

c++ - クラス内のメソッドに対する `= delete` の正しい使用

次のスニペットは、それ以外の方法で生成されたクラスのメソッドとコンストラクターをすべて定義解除するのに正しいですか?

これにより、すべてのデフォルトのコンパイラ実装が削除され、デストラクタだけが残りますよね? それがなければ、クラスは(ほとんど)使用できないと思いますが、削除することもできますよね?

Picture&move-assignの戻り値の型はoperator=(Picture&&)正しいですか? Picture&&戻り値の型について書いた場合、違いはありますか?

0 投票する
2 に答える
3196 参照

c++ - コピーできないオブジェクトをstd-containersに入れる

このクラスの設計は、コピー割り当てを防ぎ、クライアントコードを偶発的な二重削除から保護するための標準のC ++ 0xの方法dataですか?

ここで新しいmoveメソッドとmove-assignメソッドを定義したことに気づきました。それらを正しく実装しましたか?

移動移動割り当ての定義を使用DataHolderして、標準のコンテナーに入れる方法はありますか?のようにvector?どうすればいいですか?

いくつかのオプションが思い浮かびます。

ここemplace_backでは、アイデアは単なる推測です。

編集:読者の便宜のために、回答をサンプルコードにまとめました。

0 投票する
5 に答える
15716 参照

c++ - RValue 参照 (&&) の戻り値が役立つ場合はありますか?

関数が RValue Reference を返さなければならない理由はありますか? テクニック、トリック、イディオム、パターン?

私は一般的に参照を返すことの危険性を認識していますが、とにかくそれを行うこともありますよね? T& T::operator=(T)は慣用的な例の 1 つにすぎません。しかし、どうT&& func(...)ですか?それを行うことで得られる一般的な場所はありますか? クライアントコードだけと比べて、ライブラリや API コードを書くときはおそらく違いますか?