問題タブ [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 と shared_ptr の違い
重複の可能性:
pimpl: shared_ptr または unique_ptr
スマート ポインター (ブースト) の説明
誰かが shared_ptr と unique_ptr の違いを説明できますか?
c++11 - コンテナからポインタでunique_ptrを削除するには?
オブジェクトを作成し、unique_ptr を使用してコンテナーに所有権を与えることは問題ありません。生のポインターで要素を削除するにはどうすればよいですか?
c++ - make_unique と完全転送
std::make_unique
標準 C++11 ライブラリに関数テンプレートがないのはなぜですか? 私は見つける
少し冗長です。次のほうがずっといいと思いませんか?
これにより、 がnew
適切に非表示になり、タイプが 1 回だけ言及されます。
とにかく、これが私の実装の試みですmake_unique
:
コンパイルするのにかなり時間がかかりましたが、std::forward
それが正しいかどうかはわかりません。それは...ですか?とはstd::forward<Args>(args)...
どういう意味ですか? コンパイラはそれから何を作りますか?
c++ - C++0x unique_ptr の誤解?
N2812は、値パラメーターとしてaが指定されているイントロダクションの例です。unique_ptr
この論文では、RValue/LValue オーバーロードの解決に関する問題について説明していますが、それは私の主張ではありません。
引数std::unique_ptr<int> a
を値で指定してもコンパイラ エラーが発生しないのだろうか? それはそれをコピーしますよね?そして、それは許可されていませんunique_ptr
論文がかなり古いことは承知しておりunique_ptr
、それ以来 の定義が変更されている可能性があります。しかし、それは単なるタイプミスであり、作者はstd::unique_ptr<int> &a
代わりに書きたかったのでしょうか?
私のgcc 4.7.0は私に同意しますが、それは証拠ではありません:-)
c++ - std::unique_ptrをパラメーターとして関数に渡す
私は次のような構造と関数を手に入れました:
func1-functionに渡したいMYOVERLAPPEDへのポインターを取得しています。私が遭遇する問題は、何を試しても次のエラーが発生することです。
私がすでに試したことは次のとおりです:Try1:
エラー:エラー1エラーC2440:「初期化中」:「_OVERLAPPED**」から「MYOVERLAPPED*」に変換できません
Try2:
エラー1エラーC2664:'HandleAcceptIndication':パラメータ1を'MYOVERLAPPED*'から'std :: unique_ptr<_Ty>'に変換できません
OVERLAPPEDからMYOVERLAPPEDへのこのキャストされたポインターを関数に渡す方法と、何気なく使用しているのにTry2も機能しない理由を誰もが知ってstd::unique_ptr<MYOVERLAPPED> pO(new MYOVERLAPPED)
います...?
sorting - C++unique_ptrsのベクトルに対してラムダ関数を使用して動的にソートする方法は?
Derived1std::vector<std::unique_ptr<Base>> vec
と Derivedn (常に Derivedn > Derivedn-1 > ... > Derived1) (n = 10 程度) の間に論理的な比較があり、各 Derivedx がDerivedx との独自の比較です。例として、10 桁の整数 > 9 桁の整数 > 1 桁の整数ですが、各派生クラス内では 53 > 32 と考えてください (ただし、整数の並べ替えは行っていません)。
だから私はこれを行うことができます:
そして Base で、関数Base::operator<(const Base& b)
に Derived クラスが異なる場合は比較を行い、同じ場合は Derivedx にキャストし、同じ派生クラスの場合は Derivedx にキャストしDerivedx::operator<(const Derivedx& d)
ます。
ただし、派生クラスに適切な定義があれば、a と b を自動的に比較できる方法があると思いますが、コンパイル エラーのために実装できませんでした。Derivedx < Derivedy を動的に比較するラムダ関数を取得できません。
私は削除されたコピー代入演算子を使用したと言って、コンパイルエラーを試しBase::operator<(const std::unique_ptr<Base>)
てから使用しました(私は理解していません、代入はどこにありますか??)。return *a<b
抽象仮想は、 (Derivedx ごとに) 実装し、同じ場合は (Derivedx) にキャストするBase::operator<(const Base& b)
必要があるため、現在行っていることと実質的に同じことを行います。Derivedx::operator<(const Base& b)
ただし、(n の派生クラスで n の比較) で n^2 の比較を実装するよりも、基本クラスですべてを比較する方が良いかもしれません。しかし、物事を「オブジェクト指向」に保つことができるかどうかを見たいと思っています。
デザインの問題について何か考えはありますか?
ありがとう。
c++ - C++11 ポインター一意化ヘルパー関数
C++11 では、ポインタを に一意化するためのシンタティック シュガーがありませんstd::unique_ptr
。したがって、可変クラス メンバー (通常はさまざまな種類のcachestd::uniquify_ptr
) の簡単な (非コンストラクター)割り当てに通常使用される次の小さなヘルパー関数を作成しました。
ここで安全性の観点から何か不足していますか? 同様の機能はすでに利用可能ですか?
c++ - unique_ptr デリータがプログラムでクラッシュを引き起こしている
実行時にプログラムを閉じると、「アプリケーションがヒープ バッファの終了後にメモリに書き込みを行ったことを crt が検出しました」というエラーが表示されます。デストラクタを介して一意のptrのデリータにプログラムの実行を追跡したところ、デリータ関数の呼び出しでエラーが発生しました。私が言及したいもう 1 つの問題は、何らかの理由で、一意の ptr が含まれるクラス定義で、パブリック コピー コンストラクターが必要になることです。これらの問題を別のプロジェクトで別のクラスと同じプロジェクトで再現しようとしました。コピー コンストラクターとデストラクターを削除し、アクセス ラベルを変更しました。私は同じ問題を再現できませんでした。これら 2 つのプロジェクトの最大の違いは、共有ライブラリに問題があることです。これは問題でしょうか?面倒で冗長ですが、コピーコンストラクターを定義する必要がありますが、私はあまり気にしません。このメモリエラーに関する推測やアドバイスをいただければ幸いです。
c++ - c++依存性注入でstd::unique_ptrを使用できますか?
私は生のポインターを使用して依存性注入を行っていましたが、shared_ptrを使用するようにコードを変換することにしました。これは機能しますが、代わりにunique_ptrを使用できるかどうか疑問に思っていますか?以下の私の例では、MyClassがクレジットカードサービスの存続期間を管理します。
他のクラスがポインタを(所有せずに)単に「使用」している別のクラスにunique_ptrを渡すことはできますか?もしそうなら、これは良い考えであり、PaymentProcessorのコンストラクターにパラメーターのタイプを含める必要がありますか?
アップデート
上記の例では、代わりVisaCardService
にスタックに変数を作成し、PaymentProcessor
コンストラクターにこれを参照パラメーターとして使用させることができます。これは、推奨されるC++プラクティスのようです。ただし、実行時まで具体的なタイプのcreditCardService_がわからない場合(たとえば、ユーザーが実行時に使用する特定のクレジットカードサービスを選択する場合)、std::unique_ptr
参照を使用して最適なソリューションを使用していますか?
c++ - unique_ptr引数をコンストラクターまたは関数に渡すにはどうすればよいですか?
私はC++11でセマンティクスを移動するのは初めてですがunique_ptr
、コンストラクターまたは関数でパラメーターを処理する方法がよくわかりません。このクラスがそれ自体を参照していると考えてください。
unique_ptr
これは、引数を取る関数を作成する方法ですか?
そして、私std::move
は呼び出しコードで使用する必要がありますか?