move-semantics

    5

    2答えて

    私のクラスでは、メンバー変数としてstd::vectorなどを使用します。メンバー変数には、独自の移動コンストラクタが付属しています。私はクラスの移動コンストラクタを明示的に宣言しておらず、暗黙のうちにほとんどの場合宣言されていません。 myクラスの暗黙のコピーコンストラクタまたは暗黙の代入演算子がrvalueで呼び出された場合、移動コンストラクタを持つメンバーはコピーまたは移動されますか? 移動

    12

    1答えて

    こんにちは、gcc 4.7を使用してnoexcept移動コンストラクタでFooクラスを作成し、3番目のアイテムを追加するときにサイズを再割り当てする必要があるようにベクトル確保サイズを2に設定しました。これは、移動コンストラクタの代わりにコピーコンストラクタを呼び出すようです。私はここに何かを逃していますか #include <vector> #include <iostream> clas

    19

    2答えて

    最近、私は自分のふるまいを理解するために、評価額を「再生」しました。ほとんどの結果は私を驚かせることはありませんでしたが、私はローカル変数をスローすると、移動コンストラクタが呼び出されることがわかりました。 これまでは、移動セマンティクス規則の目的は、コンパイラが(一時オブジェクトの場合のように)それ以上使用されないことを検出できる場合にのみ、オブジェクトが移動して無効になることを保証することであ

    13

    5答えて

    MSDNの記事How to: Write a Move Constuctorには、次の推奨事項があります。 あなたが移動コンストラクタとクラスのための移動代入演算子の両方を提供する場合は、移動代入演算子を呼び出すため 移動コンストラクタを書き込むことによって、冗長なコードを排除することができます。 次の例では、移動代入演算子を呼び出す ムーブコンストラクタの改訂版を示す: // Move cons

    10

    2答えて

    私は以下を見つけました。 nullptrで動くことに利点はありますか?私はそれが基本的にノード*に0を割り当てると仮定しているので、ここで移動を行う利点があるかどうかはわかりません。何かご意見は? template <typename T> struct Node { Node(const T& t): data(t), next(std::move(nullptr)) { }

    7

    3答えて

    移動セマンティクスはRAIIクラスに最適です。彼らは重いコピーのコストなしで値の意味論を持っているかのようにプログラムすることができます。その大きな例はreturning std::vector from a functionです。しかし、値セマンティクスを使ったプログラミングは、型がプリミティブなデータ型のように動作することを期待することを意味します。これらの2つの側面は時々不安定に見える。 一

    11

    1答えて

    Due to this bug in Visual Studio 2013私は独自の移動コンストラクタを提供し、派生クラスの割り当てを移動する必要があります。しかし、私はどのように基本クラスの適切な移動関数を呼び出すか分からない。ここで はコードです: #include <utility> // Base class; movable, non-copyable class shader

    35

    2答えて

    多くの場合、関数からローカルを返すときにRVOが起動します。しかし、std::moveを明示的に使用するとRVOが発生しない場合でもRVOは可能な限り適用されます。しかし、そうではないようです。 #include "iostream" class HeavyWeight { public: HeavyWeight() { std::cout << "ctor

    5

    2答えて

    C++ 11に移行したので、私の文字列を私のコンストラクタで体系的に値渡ししています。しかし、今、私は、コンストラクタの本体で値を使用しているときにも、それはそれが簡単にバグを導入することができますことを実現: class A(std::string val): _val(std::move(val)) { std::cout << val << std::endl; //

    5

    1答えて

    コード作業のメイクシンプルな作品をしよう: std::thread threadFoo; std::thread&& threadBar = std::thread(threadFunction); threadFoo = threadBar; // thread& operator=(thread&& other); expected to be called エラーを取得: use