問題タブ [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.

0 投票する
2 に答える
183808 参照

c++ - unique_ptrをベクターにプッシュバックできないのはなぜですか?

このプログラムの何が問題になっていますか?

エラー:

0 投票する
4 に答える
65870 参照

c++ - std::auto_ptrからstd::unique_ptr

新しい標準(および一部のコンパイラですでに利用可能な部分)が登場すると、新しいタイプstd::unique_ptrはの代わりになるはずですstd::auto_ptr

それらの使用法は正確に重複していますか(コードでグローバルな検索/置換を実行できます(これを実行するわけではありませんが、実行した場合))、またはドキュメントを読んでも明らかではないいくつかの違いに注意する必要がありますか?

また、それが直接の置き換えである場合、単に改善するのではなく、なぜ新しい名前を付けるのstd::auto_ptrですか?

0 投票する
4 に答える
10516 参照

c++ - クラスメソッドC++0xからunique_ptrを返す

私のクラスSomeTypeに、(キーを使用して)マップから要素を返すメソッドがある場合

これにより、発信者はコピーではなく、マップ内のポインターへのポインターを受け取ることができますか?これを実行しても大丈夫ですか、それともコピーコンストラクターを呼び出そうとしますか(削除されたため失敗します)、返されるのでしょうか?

マップアイテムとしてunique_ptrを使用する必要があると仮定します。

アップデート::

コードを実装しようとした後、unique_ptrとstd:map /:pairはgcc 4.4.4で一緒に機能しないようです。ペアは、型パラメーターとしてunique_ptrが好きではありませんでした。(MoveConstructiblesのマップを作成できないを参照してください)。

ptrをstd::shared_ptrに変更しましたが、すべて機能しました。

共有ポインタで同じコードを使用できると思いますか?

0 投票する
1 に答える
543 参照

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' の宣言を参照してください

0 投票する
4 に答える
22328 参照

c++ - C++ の unique_ptr とマップ

私は次のようにC++0x unique_ptrクラスmapを使用しようとしています:

ただし、GCC では次のエラーが表示されます (短縮されています。これは関連する部分だと思います。独自の C++ コンパイラでテストしてください)。

何が間違っていたのか本当にわかりません。これはMSVCで動作します。似ているように見える非常によく似た質問を見つけましたが、それらの解決策は私にとってはうまくいきません。

0 投票する
1 に答える
2748 参照

c++ - カスタム Unique_ptr デリーター、制御された削除

XML ドキュメントを繰り返し処理し、指定された属性を見つける for ループがあります。現在のノードを指すポインターは、boost::interprocess::unique_ptr 内にあり、オブジェクトのrelease()関数を呼び出すカスタム deletor があります。ループの反復ごとにポインターが削除されるようですが、それが発生するrelease()と関数がスローされます。

誰かが解決策を提案できますか? 削除する必要があるかどうかを確認するメカニズムを実装することを考えましたが、どうすればよいかわかりません...

コード:

....

オブジェクトrelease()

削除者:

編集:

0 投票する
6 に答える
211531 参照

c++ - 関数からunique_ptrを返す

unique_ptr<T>コピーの作成は許可されませんが、代わりに移動セマンティクスをサポートします。それでも、unique_ptr<T>関数からaを返し、戻り値を変数に割り当てることができます。

上記のコードは、意図したとおりにコンパイルおよび動作します。では、その行1がコピーコンストラクターを呼び出さず、コンパイラーエラーが発生するのはどうしてですか?代わりにlineを使用する必要がある場合は、2それは理にかなっています( lineを使用する2こともできますが、必須ではありません)。

unique_ptr戻り値は関数が終了するとすぐに破棄される一時オブジェクトであり、返されたポインターの一意性が保証されるため、C++0xではこの例外が許可されていることを私は知っています。これがどのように実装されているのか知りたいのですが、コンパイラで特別な場合がありますか、それとも言語仕様にこれが悪用する他の句がありますか?

0 投票する
2 に答える
5890 参照

c++ - 標準コンテナーで std::unique_ptr を使用する

C ++ 11がsを追加することに気付いたとき、動的ポインターの安全なベクトルとマップを行う方法を探していましたunique_ptr。Google で使用方法を調べましたが、詳細を探すことができませんでした。私が知る必要があるのは次のとおりです。

  1. unique_ptr自動メモリ収集以外に 、ポインターと s の違いは何ですか?
  2. unique_ptrベクトルまたはマップから a を削除するにはどうすればよいですか? イテレータを消去する以外に使用しなければならない特別なコードはありますか?
0 投票する
5 に答える
1351 参照

c++ - スマートポインタを使用したコンテナの実装

さて、誰もがペストのように生のポインターを避け、スマートポインターを好むべきであることを知っていますが、このアドバイスはコンテナーを実装するときに適用されますか?これは私が達成しようとしていることです:

Unique_ptrは、エレガントな方法で同じオブジェクトを一時的に指す複数のrawポインターを持つことができないため、コンテナー関数の記述をより面倒にする可能性があります。例えば:

(この例では大したことではありませんが、どのように問題になるか想像できます)。このような問題を、古き良き、、、およびrawポインターを使用してコンテナーを実装する必要があるという強力なヒントとしてとらえる必要がありnewますdeleteか?デストラクタを作成しないようにするだけでも、非常に多くの問題が発生するようです。

0 投票する
4 に答える
19929 参照

c++ - shared_ptrまたはunique_ptrを使用する必要があります

pimplイディオムを使用していくつかのオブジェクトを作成してきましたが、を使用するか、を使用するかがわかりませstd::shared_ptrstd::unique_ptr

私はそれがより効率的であることを理解していますが、これらのオブジェクトはとにかく比較的重いので、オーバーstd::unique_ptrのコストは比較的小さいので、これは私にとってそれほど問題ではありません。std::shared_ptrstd::unique_ptr

私は現在std::shared_ptr、柔軟性が高いという理由だけで取り組んでいます。たとえば、を使用するとstd::shared_ptr、これらのオブジェクトのコピーを呼び出し元に返すことができる一方で、これらのオブジェクトをハッシュマップに格納してすばやくアクセスできます(イテレータまたは参照はすぐに無効になる可能性があるため)。

ただし、変更はすべてのコピーに影響するため、これらのオブジェクトは実際にはコピーされていません。したがって、std::shared_ptrコピーの使用と許可は、ある種のアンチパターンまたは悪いことであるのではないかと思いました。

これは正しいです?