問題タブ [noncopyable]
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.
c++ - std::map<>::insert コピー不可オブジェクトと均一な初期化を使用
次のコードを見てください。
g++ 4.7 でマークされた行のコメントを外すと、このスニペットのコンパイルが失敗します。生成されたエラーは、non_copyable
コピーできないことを示していますが、移動されることを期待していました。
std::pair
均一な初期化を使用して構築されたものを挿入すると失敗するのに、を使用して構築されたものを挿入できないのはなぜstd::make_pair
ですか? 両方とも、マップに正常に移動できる右辺値を生成するはずではありませんか?
c++ - シリアライゼーションの促進 - コピー不可だが移動可能なオブジェクトをシリアライズしますか?
なんとなく可能ですか?オブジェクトがシリアル化されていないときにオブジェクトをコピーしようとするため、そのままでは機能しません
更新 1: これらのオブジェクトは、メモリを割り当てるという理由だけでコピーできません。一度割り当てられると、移動できるときにコピーする理由がわかりません。非シリアル化部分は、できるだけ高速に保つ必要があります。
c++ - 継承されたクラスでのコピーコンストラクターの定義の禁止
抽象基本クラスをコピー不可にし、それから派生するクラスを強制的にコピー不可にしたい。以下のコードは、noncopyable.hppで定義されているBoostのnoncopyableを使用していますが、派生クラスであるDがコピーコンストラクターを定義できるようにしています。
このコードは、Dのコピーコンストラクターに関するコンパイル時エラーをスローすると予想したときに、コンパイルして実行します( http://ideone.com/g4gGLm )。たぶん私は、このコピー不可能なクラスが何を意味するのかを誤解しました。もしそうなら、派生クラスにコピーコンストラクターを定義しないように強制する方法はありますか?(回答はC ++ 11を使用できますが、ブーストはできません)
syntax - クラスをコピー不可として宣言するのに最適な構文は何ですか?
boost::noncopyable
(その目的のために明示的に設計された を使用できないと仮定します)
(C++11が使えないと仮定)
クラスをコピー不可にすると、通常、次の構文が表示されます。
この構文は長ったらしく見えます。代わりに以下を使用できると思います。
これはより短いように見えます (クラスの名前を 4 回ではなく 3 回だけ繰り返します。また、 and も省略const
し&
ます)。
私の構文は他の構文とまったく同じことをしますか?
どちらかを優先する理由はありますか?
c - C での型の割り当てを防止する
与えられた C 関数:
T 割り当てのすべてのインスタンスが失敗することを確認したいと思います。これまでのところ、私が持っている最善の解決策は次のようなものです:
より良い解決策はありますか?(理想的には、T をある種の代入不可の不透明なレコード ポインター型として定義したいと考えています)。
c++ - C++ optional<> およびコピー不可オブジェクトの遅延構築
以下のコードを参照してください。
問題は、optional<> を使用して、コピーできないオブジェクトの構築を遅らせるにはどうすればよいかということです。
この例ではboost::optionalを使用していますが、現在はstd::optional標準にも含まれていると思います。
はい、scoped_ptr<> を使用できますが、ヒープではなくスタックに割り当てたいと考えていました。
私は g++ を使用していますが、この場合は C++03 であるか C++11 であるかは問題ではないと思います。これは、単なるコードの詰め込みではなく、基本的な設計上の問題です。
リクエストに応じて、いくつかのエラー メッセージが表示されました。これについては、コメントを外しました。
in_place を直接使用することを提案する回答があり、これで機能します。
しかし、これではありません:
エラーメッセージ:
c++ - QObject派生クラスでQ_DISABLE_COPYを繰り返す
Qt には、クラスのプライベート コピー コンストラクターと割り当て演算子を宣言できるマクロがあります: http://qt-project.org/doc/qt-5.0/qtcore/qobject.html#Q_DISABLE_COPY
このマクロは、すべての QObject (特に QWidget) 派生クラスに使用する必要があると言われています。
これがどのように機能し、なぜ便利なのかを理解しています。
理解できないこと: QObject には既に Q_DISABLE_COPY が含まれているのに、QObject 派生クラスで Q_DISABLE_COPY を繰り返す理由はありますか?