問題タブ [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++ - C ++でコピー可能ではなく移動可能なオブジェクトを作成する
質問です。C++ Boost ライブラリ (特に boost::thread クラス) を見て、「コピーできないが関数から返すことができるオブジェクトを定義するクラスを作成するにはどうすればよいか?」と考えました。
この例をよく考えてみてください。boost::thread クラスには前述の特性があるため、これを行うことができます。
これは、オブジェクト boost::thread をコピーすることはできませんが、関数から返すことは可能であることを意味します。これはどのように可能ですか????
コピーコンストラクターを提供してはいけないと思いますが、関数からの戻りをどのように処理しますか? コピーコンストラクターを使用する必要はありませんか???
ありがとうございました
c++ - 実装提供のコピー コンストラクターと代入演算子
実装 (コンパイラ) がコピー コンストラクターとコピー代入演算子を提供しない状況について、少し混乱しています。
- クラスでコピーctorおよび/またはコピー代入演算子を宣言するとき。
- プライベートコピーctorおよび/またはコピー代入演算子を持つクラスから派生すると言う人もいます。
私は2番目の状況について少し混乱しています.2番目の状況はまさにそうです.
a) 実装では宣言されないため、コンパイル時にエラーが発生します。
または
b) 実装はそれらを宣言および定義しますが、コンパイラ定義の実装が基本クラスのメソッドを見つけようとすると、コンパイル時エラーが発生します。
私は昨日インタビューを受けました、私はその(b)が起こっていると言いましたが、インタビュアーは同意しません、彼は(a)と言いました。
Microsoft C/C++ 14.00 と gcc 4.4.5 の両方で次のコードをコンパイルしようとしました。
Microsoft コンパイラの出力
gcc コンパイラ出力
したがって、実装はそれを宣言して定義すると思いますが、コンパイラ定義の実装が基本クラスのメソッドを見つけようとすると、コンパイル時エラーが発生します。私が間違っている場合は修正してください。
c++ - boost::noncopyable に継承が必要な理由
コピー不可能なメンバーをクラスに追加すると、コピー構築および代入演算子の自動生成が妨げられます。コピー不可を使用するためにブーストが継承を必要とするのはなぜですか?
文体の好みは私だけではないと思います
とは対照的に
Dave Abrahams は頭の良い人なので、おそらくこの可能性を考慮したでしょう。私は何が欠けていますか?継承は何を達成しますか?
c++ - コピーできないオブジェクトをstd-containersに入れる
このクラスの設計は、コピーと割り当てを防ぎ、クライアントコードを偶発的な二重削除から保護するための標準のC ++ 0xの方法data
ですか?
ここで新しいmoveメソッドとmove-assignメソッドを定義したことに気づきました。それらを正しく実装しましたか?
移動と移動割り当ての定義を使用DataHolder
して、標準のコンテナーに入れる方法はありますか?のようにvector
?どうすればいいですか?
いくつかのオプションが思い浮かびます。
ここemplace_back
では、アイデアは単なる推測です。
編集:読者の便宜のために、回答をサンプルコードにまとめました。
c++ - C++ 場合によってはコピー不可
クラスをコピー不可にすると、コードの品質が大幅に向上することがわかりました。最初はboost::noncopyableでこれを行いましたが、VC++コンパイラエラーはプライベートメンバーほど役に立たないことがわかりました(ダブルクリックするとコード内の間違った場所につながります)。
確かに、クラスが参照として渡されるべき場所に渡されなかったというかなりの数のケースを私に警告しました。そのため、コンストラクトを一度だけコピーする必要があるクラスでも警告を受け取りたいと思っています。
これを行う良い方法はありますか?たとえば、上記の 2 つのメソッドをプライベートのままにして、本当にコンストラクトをコピーしたいときに呼び出すパブリック T(T const&,bool dummy) コンストラクターを追加することを考えていました。または、上記の 2 つのメソッドを公開し、コピーの作成時に何らかの方法でコンパイラの警告をアクティブにして、必要な場所で警告を抑制します。
それとも、もっと良い方法がありますか?
c++ - コピー不可のコンテナをイニシャライザリストで初期化するには?
重複の可能性:
移動専用型のベクトルをリスト初期化できますか?
このコードをコンパイルするには、gcc 4.6.1 を使用します。
g ++が不平を言うには、次のようなものがあります
この場合、g++ はまだコピー コンストラクターを試行しているようですが、イニシャライザー リストに入力したのは右辺値です。では、コピー不可のコンテナをイニシャライザ リストで初期化するにはどうすればよいでしょうか。
c++ - Boost noncopyable から派生したクラスから派生したクラスでは、コピーは自動的に禁止されますか?
例えば:
Bar
コピー不可ですか?
c++ - コピー不可を継承しても、dllexportクラスには影響しません
更新以下のバグはVS2012で修正され、期待どおりにnoncopyable
機能します
これは質問であり、情報を提供したり他の人に警告したりして、私と同じトラップに陥らないようにする方法でもあります。noncopyable
基本クラス(ブーストのクラスなど)を使用しても、エクスポートされたクラスでは効果がないようです。 MSコンパイラ。これはMSにとって既知のバグですが、それを知っているプログラマーがたくさんいるとは思えません。ご想像のとおり、これにより、コンパイルすらしてはならないコードを記述できるため、非常に厄介なバグが発生する可能性があります。例(ここにコピーできないクラスのコード:)
dllプロジェクトの典型的なヘッダーファイル。次のコマンドでコンパイルし/D EXPORT_IT
ます。
ソースファイル:
アプリケーション:
出力:
1つのコンストラクタ、2つのデストラクタが呼び出されます。クラスにリソースが効果的に含まれている場合の問題を想像してみてください。
コンパイルは行うがすべきではない使用例を編集します。
その他の場合:CantCopyMe MakeIt(){return CantCopyMe(); //致命的なエラーC1001}
質問:
KBの記事では、今後のリリースでの修正について言及しています。誰かがこれがVS2010ですでに修正されているかどうかを確認できますか(またはおそらくVisual Studio 11プレビューで)?
何らかのエラーをトリガーするための回避策はありますか?
return CantCopyMe()
書き込みが内部コンパイラエラーをトリガーするという事実を(ab)使用してみましたが、MakeIt
上記のような関数をコンパイルする場合にのみ条件付きでトリガーする方法を見つけることができませんでした。static_assertをコピー不可能なコピーコンストラクターに入れても、コンパイラーは呼び出されなくても常にコンパイルするため、それはカットされません。
c++ - boost::noncopyable の利点は何ですか
クラスのコピーを防ぐために、プライベート コピー コンストラクター/代入演算子を非常に簡単に宣言できます。ただし、継承することもできますboost::noncopyable
。
この場合、ブーストを使用することの利点/欠点は何ですか?
c# - c# messagebox.show ポップアップからテキストを選択
私はグーグルとスタックオーバーフローで2時間検索しています。私が単に見落としている何かがなければなりません。メッセージボックスでテキストを選択可能にする簡単な方法はありますか? 現在、MessageBox.Show() を呼び出すと、表示されたテキストをコピーできません。なぜだめですか?テキストをコピーできるように設定するにはどうすればよいですか?
私のコード:
表示されるエラー メッセージを選択できるようにして、ユーザーがそれを送信して問題をトラブルシューティングできるようにしたいと考えています。どんな助けでも大歓迎です。
編集: crtl-c メソッドは使用できません。私のユーザーはその概念を理解できません。マウスで強調表示し、右クリックしてオプションを選択する必要があります。ありがとう!
編集:参考までに、私が最終的に行ったことは、回答の混合物を使用することです。1 つのボタンでポップアップ ウィンドウを作成し、ボタン アクションをクリップボードにコピーしました。完璧ではありませんが、適切なラベルがあれば、今のところ十分に機能します。提案をありがとうございました!