にセッターには?私はmyVectorを格納するためにスマートポインタを使用したくありません。移動セマンティクスを使用できますか?これを行う方法?効率的な通過ベクトルは、私はクラスを持っているクラス
答えて
ちょうどstd::vector<int>
への右辺値参照を取るsetMyVector()
過負荷を提供し、そこにオブジェクトを移動、例えば:明らか
void setMyVector(std::vector<int>&& newVector) {
this->myVector = std::move(newVector);
}
、あなたが適切にこの関数を呼びたい:
example.setMyVector(std::move(newMyVector));
こんにちは、あなたはなぜ参照するためにパラメータ参照をする必要があるのですか? –
@LorenceHernandez: '&&'は「参照への参照」ではなく、* r値の参照*です。コメントはおそらくC++の移動セマンティクスを導入するのがやや簡潔ですが、基本的な考え方は、左辺値(何らかの意味で参照できるもの)を右辺値参照にバインドできないということです。右辺値参照に一時的な(例えば、 'std :: move()'を使って)見えるようにした一時的なものや左辺値をバインドすることはできます。結論は:rvalue参照は、それが参照しているオブジェクトが近づいておらず、表現を転送できることを示しています。この 'setMyVector()'のオーバーロードは表現を転送します。 –
はい、明示的にstd::move()
を呼び出すことによってベクトルをコピーせずに移動することができます。これはstd::vector
コンストラクタは、このタイプの利点を活用するための特別なコンストラクタを持っている、右辺値参照に、あなたのベクトルをキャスト:
example.setMyVector(std::move(newMyVector));
はsetMyVector()
で右辺値参照を求めるようにしてください:
void setMyVector (std::vector<int> && vec)
^^rvalue reference
は
setMyVectorが引数をstd :: moveがあまり機能しないR値refとして受け取らない場合、 – RyanP
@ RyanP mhmは編集中です。 –
@RyanP:実際には、 'setMyVector()'は、コピーエリートによるコピーや移動を避けることができるので、値で引数を取ることもできます。しかし、上記のクラスのようなものでは、私はむしろ既存のメモリを再利用する可能性がある特別な左辺値の割り当てを持っています。 –
- 1. 私はクラスを持っている1つのベクトル
- 2. 再初期化ベクトルは、私はクラスの敵を持って
- 3. 私はFilterクラスを持っている
- 4. は、私が持っているプロジェクトがあり、共通のクラス
- 5. JAVAのリファレンスは、私はクラスを持っている他のクラス
- 6. は、次のように私はクラスを持っているクラス
- 7. C#のリフレクションType.Nameは、私が通過反映していますアセンブリ内のクラスを持っている
- 8. C通過(ポインタ)が、私はこのコードを持っている
- 9. Androidのクラス、私はこのクラスを持っているRelativeLayout(onResume)
- 10. JsonIgnorePropertiesは、私は、次の単純なクラスを持っている
- 11. 効率的なクエリは、私はこのようなサンプルデータを持つテーブルを持っている口座残高
- 12. はスロー:私はクラスを持って、
- 13. もっと効率的な方法は、私は2つの大きなリストを持っている
- 14. 私のSQLクエリは、私は、このクラスを持っている
- 15. 正規表現 - 効率的に私はショートカットのリストを持っているテキスト
- 16. 私は以下のクラスを持っている一般的な比較可能
- 17. 私は、これらのクラスを持っている一般的な方法
- 18. JAXB、私は次のようなクラスを持っている
- 19. C++私はmyVectorクラスを持っている主な
- 20. 私はこれが私のクラスであるrecyclerview.Adapterクラスを持っているRecyclerView.Adapter
- 21. FXMLは、私は、最終的な静的フィールドを持つクラスを持っているソース
- 22. は、なぜ私はいくつかのコードを通過されたクラス
- 23. 私は次のクラス持っ
- 24. 私は2クラス持っ
- 25. 私は次のクラス持っ
- 26. 汎用Javaクラスは、私が比較対象を格納し、一般的なJavaクラスを持っている
- 27. は、私はTのベクトルのベクトルを持っている
- 28. クラス、参照は次のように私はクラスを持っているメモリ
- 29. は、私はこれらの2つのクラスを持っている外部クラス
- 30. コールクラスに静的関数は、私は、次のReactJSクラスを持っているES6
のstd ::動きが心に来る。 – DeiDei
'example.getMyVector()'をしておかないと、 'methodCreatingNewMyVector'の中のターゲットベクトルで直接作業するのはなぜですか? – Unimportant
申し訳ありません。私はconst goを追加するのを忘れましたgetMyVector() – Marcin