問題タブ [unique-ptr]
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++0x のパフォーマンスの向上
より効率的な C++ コードを記述できるようにする C++0x の改善点の 1 つは、unique_ptr スマート ポインターです (残念ながら、memmove() のような操作を介して移動することはできません: 提案はドラフトに含まれていませんでした)。
今後の標準でのその他のパフォーマンスの改善点は何ですか? 次のコードを例にとります。
このコードは、ベクトルvに含まれるすべての文字列を連結します。このきちんとしたコードの問題は、accumulate() がコピーを行い、参照を使用しないことです。また、プラス演算子が呼び出されるたびに string() が再割り当てされます。したがって、このコードは、適切に最適化された類似の C コードに比べてパフォーマンスが低下します。
C++0x は問題を解決するためのツールを提供していますか?
c++ - Visual C++ 2010 Beta 1 には unique_ptr がありますか? ない場合、C++0x リファレンス実装はどこで入手できますか?
私が知っている:
- CTPにはありませんでした
- 最終リリースになる予定です
- Beta 1 では見つからない
- 私はそれで遊びたい
c++ - MoveConstructibles のマップを作成できません
を含むクラスがありstd::unique_ptr<>
、このクラスのインスタンスを 内に配置したいと考えていますstd::map<>
。C++ にムーブ セマンティクスを導入する動機の 1 つは、標準コンテナー内に物を配置できるunique_ptrs
ことだと思いました (ベクトルの場合、これは実際に機能します)。しかし、私にstd::map<>
はこの考えが気に入らないようです。これはなぜですか?
ありがとう。
- 編集
より明確にするために、正確なエラーメッセージは次のとおりです。
それは の問題のように見えますが、std::pair<>
単独で使用すると完全に正常に動作します:
それは明らかに悪用できないという意味ではありませんが:
これはおそらく の中で起こることですstd::map<>
。
手がかり?
- 編集
エラー メッセージを確認すると、実際には TDM-GCC 4.4.1 のstd::map<>
実装に問題があることがわかります。のような移動セマンティクスを意識した挿入メソッドを備えていないようですstd::vector<>::push_back(value_type&&)
。
今何をする?
c++ - Hinnant の unique_ptr 実装は、この場合、派生からベースへの変換に誤って失敗しますか?
現在、 Howard Hinnant の unique_ptr 実装を使用しようとしていますが、コンパイル エラーが発生しています。サンプルコードは次のとおりです。
私が得るエラーは
問題のある行は失敗しないようです。これは実装のバグですか、C++0x 言語機能の欠如による実装の制限ですか、それとも unique_ptrs のルールの誤解ですか?
(注: 同じものを複数回移動しているため、実行時にこれが機能しないことはわかっています。コンパイル時のエラーを把握しようとしているだけです。)
c++ - auto_ptr は非推奨ですか?
- 次の C++ 標準で auto_ptr は廃止されますか?
- 所有権の譲渡には、shared_ptr の代わりに unique_ptr を使用する必要がありますか?
- unique_ptr が標準にない場合、代わりに shared_ptr を使用する必要がありますか?
c++ - unique_ptr を含むこのコードをコンパイルするにはどうすればよいですか?
コンパイルされません...(unique_ptrのコピーコンストラクタが削除されていると言います)
move を forward に置き換えてみました。うまくいったかどうかはわかりませんが、うまくいきませんでした。
c++ - では、unique_ptrはstlコレクションで安全に使用できますか?
私はunique_ptrと右辺値移動の哲学と混同しています。
2つのコレクションがあるとしましょう。
アルゴリズムが内部で何をしているのか、おそらく内部ピボットコピーなどを作成しているのかわからないため、auto_ptrから所有権を奪うため、次のことが失敗すると予想されます。
私はこれを取得します。そして、コンパイラはこれを正しく禁止します。
しかし、私はこれを行います:
そして、これはコンパイルされます。そして、その理由がわかりません。unique_ptrsをコピーできるとは思いませんでした。これは、ピボット値を取得できないため、並べ替えの効率が低下することを意味しますか?それとも、このピボットは実際には動きであり、実際にはauto_ptrsのコレクションと同じくらい危険であり、コンパイラーによって許可されるべきではありませんか?
重要な情報が不足していると思うので、誰かが私にああを提供してくれるのを心待ちにしています!一瞬。
c++ - unique_ptr ブースト相当?
ブースト ライブラリに C++1x の std::unique_ptr に相当するクラスはありますか? 私が探している動作は、例外セーフなファクトリ関数を持つことができることです...
編集:現在、私はこのハックを使用しています。これは、現時点で入手できる最高のようです...
c++ - tcp::acceptor::async_accept による所有権のソケット ポインター転送
私は最近、プロジェクトで Boost.Asio の使用を開始しました。新しく作成されたソケットの所有権を tcp::acceptor::async_accept に転送するクリーンなソリューションを誰かが知っているかどうかを知りたいと思います。これにより、この所有権が受け入れに転送されます。ハンドラー関数。
ハンドラーは一度だけ呼び出される必要があるため、これは一貫性のない欲求ではありません。
std::bind() はそのパラメーターを CopyConstructible にする必要があるため、 std::bind() をパラメーターとして std::unique_ptr<> できないことに気付きました。それだけでなく、Boost の AcceptHandler の概念も CopyConstructible である必要があります。
したがって、私のオプションは次のようになります。
- コピー コンストラクターを使用してオブジェクトを移動する非推奨の std::auto_ptr<> 方法を使用すると、Boost.Asio の新しいリリースであいまいなバグが発生する可能性があります。
- std::shared_ptr<> を使用し、ポインターが不要になったら、つまり実際のハンドラー関数に到達したときに共有所有権をポインターから取り除く方法はありません (これは、http://wwwの例でジョブが行われる方法です)。私が読んだ限りでは.boost.org/doc/libs/1_43_0/doc/html/boost_asio/examples.html )。
また
- あなたは私にとってより良い考えを持っています。
私はここでかなり途方に暮れています。誰でも私を啓発できますか?
c++ - std::list< std::unique_ptr>: 渡す
のがあるstd::list
としclass T
ます:
関数に渡すときは、参照を使用します。
sstd::list
のa (要素) を渡す最良の方法は何ですか?unique_ptr
このような:
またはこれ:
またはこれ:
そして、たとえばstd::list
's関数を使用してどのように呼び出すのでしょうか? back()
これらはすべて「一種の」同等のものですが、ここで何かが欠けていると確信しています。
ありがとう