move-semantics

    2

    1答えて

    非常に単純な、ベアボーンのC++クラスを作成して、スレッドセーフなリスト、つまりアクセス時に自動的にロックされるリストを実装しようとしています。残念ながら、コンパイラは、unique_lockを含む構造体を作成して返すことを許可したくありません。これは私が最初に試したものです: template<typename T> struct LockedQueue { private:

    1

    1答えて

    コンパイラがテンプレートのインスタンス化に関する警告を私に与える理由はわかりません。 はうまく動作し、適切に左辺値/右辺値を出力コードの一部厥: //template<typename T> void overloaded(const /*T*/std::string& in) { std::cout << "lvalue" << std::endl; } //template

    0

    2答えて

    Forcing Move Semantics だからある意味で、私たちはここに 非決定論的破壊の冥府に漂流しています:変数に代入された、 が、オブジェクトを以前はその変数によって保有されていましたが、まだどこかで です。 そのオブジェクトの破壊が外界に見える副作用を持たない限り、それはうまくいきます。 しかし、 デストラクタにはこのような副作用があることがあります。例は、デストラクタ内のロックの解

    0

    1答えて

    宣言されたデストラクタを持つnoncopyableクラスが必要で、単純なアプローチが動作しません。https://ideone.com/mU8aocを参照してください。デストラクタの問題は何ですか?なぜ、移動がそれなしで同じ方法で動作しないのですか?もちろん、それを修正する方法は?参考のため 、完全なコード(上記ideoneリンクによると同じ): class noncopyable { publ

    2

    2答えて

    同様の質問が表示されましたが、問題の明確な説明が見つかりませんでした。ここでは、コード(:http://melpon.org/wandbox/permlink/nBiik8pMkpKCD3Jvそれはここで見つけることができます):ある限り、私は理解されるように #include <iostream> class A { public: explicit A(int a)

    16

    1答えて

    私はシンプルなスマートポインタを実装しています。これは、基本的にそれが扱うポインタへの参照の数を追跡します。 私が知っているは移動のセマンティクスを実装することができますが、スマートなポインタをコピーすることは非常に安価であるとは思いません。特に、それは厄介なバグを生み出す機会をもたらしていると考えています。 ここに私のC++ 11のコードがあります(私はいくつかの本質的なコードを省略しました)。

    0

    1答えて

    ポストインクリメントオペレータは、起点ポインタをnullに設定するのに似たものがありますか? 募集行動: Class MyClass{ public: int * ptr; MyClass(MyClass && origin) noexcept; MyClass(){} }; MyClass::MyClass(MyClass && origin) n

    2

    2答えて

    手続きを外しましょう。 そのタイプ ため を指定されているように挙動オブジェクト上 17.3.28有効ですが、不特定の状態[defns.valid] オブジェクトオブジェクトの 不変条件が満たされていることを除いて指定されていない状態と操作 [例:タイプstd::vector<int>の目的xはx.empty()無条件 、及び0123呼び出すことができ、有効ではなく不特定の状態である場合は、x.e

    4

    1答えて

    誰かがstd::moveの私の理解を助けることができますか? r値の参照が範囲外になる場合は、std::move演算子を使用して割り当てられていれば、その参照も範囲外になると考えました。それはなぜ以下のコードのケースではないのですか? #include<iostream> using namespace std; int main() { string one = "1 - on

    18

    3答えて

    私は変更できない外部ライブラリを持っています。 template<class C> const C foo(); は私があまりにも変更することはできません別の外部ライブラリを持っている:ライブラリが何らかの理由で const非参照オブジェクトを返すテンプレート関数を宣言します。ライブラリは、非コピー可能であり、唯一の非constオブジェクトからの移動のコンストラクタを持つクラスを宣言します。