問題タブ [make-shared]
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.
multithreading - packaged_task で作成されたスレッド (boost) を shared_ptr ベクトルにどのように配置できますか
これはブースト ライブラリの例です。
boost::thread task(boost::move(pt));
スレッドでタスクを起動する代わりに
、スレッドを shared_ptr ベクトルに入れて、スレッドでタスクを起動したいと考えています。
まず、ベクトルを作成します。
そして、これはスレッドをベクターに入れる正しい方法ですか?
ご清聴ありがとうございました!
boost - shared_ptr によってメモリを解放せずにメモリの所有権を放棄する
現在それによって指されているメモリを解放せずに、共有ポインタが別のメモリ位置を指すようにする方法はありますか
コードを検討してください:
c++ - make_shared で const メンバーを初期化する
次のコードは、Xcode 6.3.2 を使用してコンパイルされますが、Visual Studio 2013 ではコンパイルされません。
報告されたエラーは次のとおりです。
これは Visual Studio のコンパイラのバグでしょうか、それともコードに何か問題がありますか?
c++ - weak_ptr、make_shared、およびメモリの解放
a の制御ブロックはshared_ptr
、少なくとも 1 つ存在する間は維持されますweak_ptr
。共有ポインタが作成された場合、make_shared
それはオブジェクトのメモリ全体が割り当てられたままであることを意味します。(オブジェクト自体は適切に破棄されますが、オブジェクトの制御ブロックとメモリが 1 つのチャンクに割り当てられているためmake_shared
、それらは一緒にしか割り当て解除できません。)
私の理解は正しいですか?
この動作は、有名な「キャッシュの例」などの問題を表しているようです。オブジェクトのメモリは永久に割り当てられたままになります。
実際の状況で問題になりますか?shared_ptr
このような状況 (大きなオブジェクトと s を使用する意図) でコンストラクターを使用して作成する必要がありますかweak_ptr
?
c++ - std::make_shared およびプライベート コンストラクター
私は関数の(私に言わせてください)コーナーケースに苦労しており、(std::make_shared
それほど深刻ではない)問題に対する実行可能な代替手段を見つけることができませんでした。
次のコードは正常にコンパイルされます。
これは直感的には、 Aという名前のユーザー定義クラスの一種のファクトリの小さな例です。
のドキュメントを見るとstd::make_shared
、次のことがわかります。
この関数は通常、new の呼び出しによって返される生のポインターから共有ポインターの構築 std::shared_ptr(new T(args...)) を置き換えるために使用されます。その式とは対照的に、std::make_shared は通常、T オブジェクトと std::shared_ptr の制御ブロックに単一のメモリ割り当てでメモリを割り当てます (これは標準では拘束力のない要件です)。 new T(args...)) は、少なくとも 2 つのメモリ割り当てを実行します。
非常に興味深いことに、コメント行を直後の行に切り替えると役立つかもしれません。関数の次のコードになりますcreate
。
残念ながら、このバージョンは、のプライベート コンストラクターが原因でコンパイルされませんA
(エラーは のようなものですerror: ‘constexpr A::A()’ is private
)。
明確にするために、問題はそれ自体のエラーではありません。何が原因であるかは私には明らかであり、それは理にかなっています。std::make_shared
とにかく、関数を使用し、コンストラクターを同時にプライベートにするための回避策があるかどうかを知りたいです。私が見る限り、最初の例のコードは、用語やパフォーマンスに関してよく知られた (そして文書化された) 欠点があることは言うまでもありませんが、利用可能な唯一の解決策のようです。