問題タブ [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++ - unique_ptrをベクターにプッシュバックできないのはなぜですか?
このプログラムの何が問題になっていますか?
エラー:
c++ - std::auto_ptrからstd::unique_ptr
新しい標準(および一部のコンパイラですでに利用可能な部分)が登場すると、新しいタイプstd::unique_ptr
はの代わりになるはずですstd::auto_ptr
。
それらの使用法は正確に重複していますか(コードでグローバルな検索/置換を実行できます(これを実行するわけではありませんが、実行した場合))、またはドキュメントを読んでも明らかではないいくつかの違いに注意する必要がありますか?
また、それが直接の置き換えである場合、単に改善するのではなく、なぜ新しい名前を付けるのstd::auto_ptr
ですか?
c++ - クラスメソッドC++0xからunique_ptrを返す
私のクラスSomeTypeに、(キーを使用して)マップから要素を返すメソッドがある場合
これにより、発信者はコピーではなく、マップ内のポインターへのポインターを受け取ることができますか?これを実行しても大丈夫ですか、それともコピーコンストラクターを呼び出そうとしますか(削除されたため失敗します)、返されるのでしょうか?
マップアイテムとしてunique_ptrを使用する必要があると仮定します。
アップデート::
コードを実装しようとした後、unique_ptrとstd:map /:pairはgcc 4.4.4で一緒に機能しないようです。ペアは、型パラメーターとしてunique_ptrが好きではありませんでした。(MoveConstructiblesのマップを作成できないを参照してください)。
ptrをstd::shared_ptrに変更しましたが、すべて機能しました。
共有ポインタで同じコードを使用できると思いますか?
c++ - boost::Unique_Ptr オブジェクトのリスト
なぜ私はこれを行うことができないのですか?
public boost::intrusive::list_base_hook<>
QueueList は、侵入型リンク リストの一部にするために派生するクラスです 。
unique_ptr を使用して、このオブジェクトをスレッド間で受け渡しできるようにし、その時点でこのオブジェクトの所有権を持つスレッドを 1 つだけにしたいと考えています。
編集: エラー:
error C2039: 'pointer' : 'boost::intrusive::detail::default_list_hook' のメンバーではありません 'boost::intrusive::detail::default_list_hook' の宣言を参照してください クラス テンプレートのインスタンス化への参照 'boost::intrusive ::list_impl' は [ Config=boost::intrusive::listopt::value_traits,boost::intrusive::size_type::pack>::type,boost::intrusive::constant_time_size>::type>:: でコンパイルされています。 size_type,true> ]
エラー C2039: 'const_pointer' : 'boost::intrusive::detail::default_list_hook' のメンバーではありません 'boost::intrusive::detail::default_list_hook' の宣言を参照してください
c++ - C++ の unique_ptr とマップ
私は次のようにC++0x unique_ptr
クラスmap
を使用しようとしています:
ただし、GCC では次のエラーが表示されます (短縮されています。これは関連する部分だと思います。独自の C++ コンパイラでテストしてください)。
何が間違っていたのか本当にわかりません。これはMSVCで動作します。似ているように見える非常によく似た質問を見つけましたが、それらの解決策は私にとってはうまくいきません。
c++ - カスタム Unique_ptr デリーター、制御された削除
XML ドキュメントを繰り返し処理し、指定された属性を見つける for ループがあります。現在のノードを指すポインターは、boost::interprocess::unique_ptr 内にあり、オブジェクトのrelease()
関数を呼び出すカスタム deletor があります。ループの反復ごとにポインターが削除されるようですが、それが発生するrelease()
と関数がスローされます。
誰かが解決策を提案できますか? 削除する必要があるかどうかを確認するメカニズムを実装することを考えましたが、どうすればよいかわかりません...
コード:
....
オブジェクトrelease()
削除者:
編集:
c++ - 関数からunique_ptrを返す
unique_ptr<T>
コピーの作成は許可されませんが、代わりに移動セマンティクスをサポートします。それでも、unique_ptr<T>
関数からaを返し、戻り値を変数に割り当てることができます。
上記のコードは、意図したとおりにコンパイルおよび動作します。では、その行1
がコピーコンストラクターを呼び出さず、コンパイラーエラーが発生するのはどうしてですか?代わりにlineを使用する必要がある場合は、2
それは理にかなっています( lineを使用する2
こともできますが、必須ではありません)。
unique_ptr
戻り値は関数が終了するとすぐに破棄される一時オブジェクトであり、返されたポインターの一意性が保証されるため、C++0xではこの例外が許可されていることを私は知っています。これがどのように実装されているのか知りたいのですが、コンパイラで特別な場合がありますか、それとも言語仕様にこれが悪用する他の句がありますか?
c++ - 標準コンテナーで std::unique_ptr を使用する
C ++ 11がsを追加することに気付いたとき、動的ポインターの安全なベクトルとマップを行う方法を探していましたunique_ptr
。Google で使用方法を調べましたが、詳細を探すことができませんでした。私が知る必要があるのは次のとおりです。
unique_ptr
自動メモリ収集以外に 、ポインターと s の違いは何ですか?unique_ptr
ベクトルまたはマップから a を削除するにはどうすればよいですか? イテレータを消去する以外に使用しなければならない特別なコードはありますか?
c++ - スマートポインタを使用したコンテナの実装
さて、誰もがペストのように生のポインターを避け、スマートポインターを好むべきであることを知っていますが、このアドバイスはコンテナーを実装するときに適用されますか?これは私が達成しようとしていることです:
Unique_ptrは、エレガントな方法で同じオブジェクトを一時的に指す複数のrawポインターを持つことができないため、コンテナー関数の記述をより面倒にする可能性があります。例えば:
(この例では大したことではありませんが、どのように問題になるか想像できます)。このような問題を、古き良き、、、およびrawポインターを使用してコンテナーを実装する必要があるという強力なヒントとしてとらえる必要がありnew
ますdelete
か?デストラクタを作成しないようにするだけでも、非常に多くの問題が発生するようです。
c++ - shared_ptrまたはunique_ptrを使用する必要があります
pimplイディオムを使用していくつかのオブジェクトを作成してきましたが、を使用するか、を使用するかがわかりませstd::shared_ptr
んstd::unique_ptr
。
私はそれがより効率的であることを理解していますが、これらのオブジェクトはとにかく比較的重いので、オーバーstd::unique_ptr
のコストは比較的小さいので、これは私にとってそれほど問題ではありません。std::shared_ptr
std::unique_ptr
私は現在std::shared_ptr
、柔軟性が高いという理由だけで取り組んでいます。たとえば、を使用するとstd::shared_ptr
、これらのオブジェクトのコピーを呼び出し元に返すことができる一方で、これらのオブジェクトをハッシュマップに格納してすばやくアクセスできます(イテレータまたは参照はすぐに無効になる可能性があるため)。
ただし、変更はすべてのコピーに影響するため、これらのオブジェクトは実際にはコピーされていません。したがって、std::shared_ptr
コピーの使用と許可は、ある種のアンチパターンまたは悪いことであるのではないかと思いました。
これは正しいです?