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

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

multithreading - packaged_task で作成されたスレッド (boost) を shared_ptr ベクトルにどのように配置できますか

これはブースト ライブラリの例です。

boost::thread task(boost::move(pt));スレッドでタスクを起動する代わりに
、スレッドを shared_ptr ベクトルに入れて、スレッドでタスクを起動したいと考えています。

まず、ベクトルを作成します。

そして、これはスレッドをベクターに入れる正しい方法ですか?

ご清聴ありがとうございました!

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

boost - shared_ptr によってメモリを解放せずにメモリの所有権を放棄する

現在それによって指されているメモリを解放せずに、共有ポインタが別のメモリ位置を指すようにする方法はありますか

コードを検討してください:

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

c++ - make_shared で const メンバーを初期化する

次のコードは、Xcode 6.3.2 を使用してコンパイルされますが、Visual Studio 2013 ではコンパイルされません。

報告されたエラーは次のとおりです。

これは Visual Studio のコンパイラのバグでしょうか、それともコードに何か問題がありますか?

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

c++ - weak_ptr、make_shared、およびメモリの解放

a の制御ブロックはshared_ptr、少なくとも 1 つ存在する間は維持されますweak_ptr。共有ポインタが作成された場合、make_sharedそれはオブジェクトのメモリ全体が割り当てられたままであることを意味します。(オブジェクト自体は適切に破棄されますが、オブジェクトの制御ブロックとメモリが 1 つのチャンクに割り当てられているためmake_shared、それらは一緒にしか割り当て解除できません。)

私の理解は正しいですか?

この動作は、有名な「キャッシュの例」などの問題を表しているようです。オブジェクトのメモリは永久に割り当てられたままになります。

実際の状況で問題になりますか?shared_ptrこのような状況 (大きなオブジェクトと s を使用する意図) でコンストラクターを使用して作成する必要がありますかweak_ptr?

0 投票する
0 に答える
426 参照

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とにかく、関数を使用し、コンストラクターを同時にプライベートにするための回避策があるかどうかを知りたいです。私が見る限り、最初の例のコードは、用語やパフォーマンスに関してよく知られた (そして文書化された) 欠点があることは言うまでもありませんが、利用可能な唯一の解決策のようです。