問題タブ [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 に答える
977 参照

c++ - pimpl: pimpl でポインタからポインタへのポインタを避ける

この質問では、「pimpl: shared_ptr or unique_ptr」と尋ねました。pimpl イディオムの適切な使用法は、 aunique_ptrではなく aを使用することであると確信しましたshared_ptr。ユーザーにはポインターがまったくないかのように動作する必要がありますが、shared_ptrコピー時にエイリアシングが導入されることは明らかであり、これは間違いなくポインターのように動作します。

したがって、ユーザーがshared_ptr私の pimpl オブジェクトに を作成したいとしましょう (実際に複数のエイリアスが必要な場合など)。例えば:

それは私の実装を指すことになりますshared_ptrunique_ptr

次のようなものを達成できればいいのですが:

しかし、どうにかしてポインタからポインタへのポインタを取り除き、pimpl の実装の非表示を維持します。

これを達成する方法についてのアイデア (行 (2) と明らかに変更できてうれしいですが、my_pimpl行 (3) と (4) は同じままにしておきたい)。

0 投票する
3 に答える
51428 参照

c++ - std::unique_ptrの使用法

ここでは、p2も参照しているため、p1は「一意」ではなくなっているようです。

それは合法的なC++ですか?unique_ptrにはcopy_semanticsがありますか?いいえの場合、および移動セマンティクスしかない場合、p2に割り当てた後にp1はNULLに設定されますか?

編集:

わかりました。正しいバージョンは

それによると、この割り当ての後、p1は無効ですか?そして、auto_ptrとの違いはここにありますか?auto_ptrの場合のように、暗黙的に所有権の譲渡を明示的に指定するよりも安全です。

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

c++ - NULL 値を返す

framebufferd3d11.h のスニペット

framebufferd3d11.cpp のスニペット


icc でコンパイルすると、NULL は 0 として定義されるため、NULL の代入値に問題が発生します。このような問題を解決するにはどうすればよいですか?

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

c++ - あるベクトルから別のベクトルへのunique_ptrsの移動

それらのソートされていないベクトルに格納されているunique_ptrを、ポインターのソートされたベクトルを含む別のベクトルに移動したいと思います。

確かにunique_ptrを移動しても、最初のベクトルの要素は自動的に消去されませんか?これどうやってするの?

私がやりたいことの例:

意図が明確であることを願っています。

更新私のアルゴリズムでは、インプレースソートが許可されていません。今日誰かが気分がいいなら(私は尋ねていません、私の質問については上記を参照してください)、この状況のた​​めにそれを自由に実装して見せてください。私は本当に「移動による並べ替え」が必要です。そして、なぜ引っ越しがそれほど高価になるのか、私にはよくわかりません。

0 投票する
3 に答える
344 参照

c++11 - std::unique_ptr が指すオブジェクトを変更する関数

コードのどこかに local がありstd::unique_ptr<T>ます。指しているオブジェクトを操作する必要があり、そのために関数を使用します。

この関数を次のように呼び出します。

必要な機能を取得するためのより良い方法はありますか? 2 つの動きはかなり不必要であり、潜在的に危険なようです。ここには示していないエラー処理コードがありますが、それは重要ではありません。

0 投票する
9 に答える
53254 参照

c++ - std::unique_ptr ですT の完全な定義を知る必要がありますか?

ヘッダーに次のようなコードがあります。

型定義を含まない cpp にこのヘッダーを含めると、ThingVS2010-SP1 でコンパイルされません。

1>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\memory(2067): エラー C2027: 未定義の型 'Thing' の使用

に置き換えstd::unique_ptrstd::shared_ptrコンパイルします。

したがって、完全な定義が必要なのは現在の VS2010std::unique_ptrの実装であり、完全に実装に依存していると思います。

またはそれは?std::unique_ptrの実装が前方宣言のみで動作することを不可能にする標準要件に何かありますか? へのポインターだけを保持する必要があるため、奇妙に感じThingますね。

0 投票する
3 に答える
2456 参照

c++ - 関数から返されるunique_ptrのスコープは何ですか?

これは正しく機能しますか?(例を参照)

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

c++11 - unique_ptrカスタムストレージタイプの例?

ハワード・ヒナントは、 カスタムストレージタイプも使用できると説明しました。彼は例として「共有メモリ」に言及しています。unique_ptr

彼は大まかなアイデアを与えるだけです(これは簡単なイントロには問題ありません)。しかし、誰でも「カスタムストレージタイプ」(共有メモリかどうかに関係なく)の例を完成させることができますか?

共有メモリへの配置をサポートするためunique_ptrに、カスタムデリータにカスタムポインタタイプを含めることができます(通常、共有メモリアプリケーションでは実際のポインタではありません)。ポインタの動作をエミュレートするポインタと呼ばれるネストされた型を削除機能内に配置するだけで、一般にアクセスできます

私はそれを// ...拡張する必要があるとtest()思います、そしておそらく実際の「カスタムストレージタイプ」の例でいくつかの追加のことをするでしょう。

誰かがどこにいるのか教えてもらえますか

  • 実際にはすでにこのカスタマイズを使用しています、
  • そしてその文脈では、
  • どのカスタマイズコード、(//...おそらく)
  • そして、クライアントコードはそれをどのように使用しますか?(test()おそらく)
0 投票する
1 に答える
166 参照

c++11 - イニシャライザ リスト (C++0x) のクロージャ デリータとコンパイラの警告

warning C4355: 'this' : used in base member initializer listVisual C++ 2010 から取得します。

ハンドルを保持しているクラスがあり、クラスの ctor が失敗した場合でもハンドルを自動的に閉じたい(そのため、dtor は呼び出されません)。ただし、ハンドル ラッピング クラス全体をわざわざ作成したくはありません。むしろ、それをスマート ポインターに保持したいと考えています。そして、私はこれを書いた:

クロージャーの前に、 _handle を のようなもので初期化していまし_handle(nullptr, bind(PortDeleter, placeholders::_1, ref(_log)))たが、それには別の定義が必要です。

私の質問: 警告は、この特定のインスタンスに対する懸念事項ですか? いずれにせよ、詳細な理由は何ですか?それを回避する簡単な方法はありますか?

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

c++ - unique_ptrs の STL 回転 const_iterators

unique_ptr の中間で const_iterator で std::rotate を使用すると問題が発生します。

私が試してみました:

これにより、rotate(...iterator, ...const_iterator &, ...iterator) の呼び出しに一致する関数がなくなります。

したがって、私はこれを試しました: std::vector >::const_iterator first = vec.begin(); std::vector >::const_iterator last = vec.end(); std::rotate(最初、中間、最後);

次に、以下に示す一連のエラーメッセージが表示されます。これはバグですか、それとも何かミスをしましたか?