一意のポインターを使用した Lambda の所有権の保持
C では、 unique_ptr は単一オブジェクトの所有権を排他的に管理するように設計されています。 unique_ptr をラムダ式に取り込もうとすると、所有権があいまいになる可能性があります。この問題に対処する方法は次のとおりです。
最初は、unique_ptr をラムダ内の参照としてキャプチャしようとすると、コンパイルに失敗する可能性があります。所有権をラムダに明示的に譲渡するために、C 14 ではラムダ一般化キャプチャが導入されました:
auto getAction = [](std::unique_ptr<MyClass> psomething) { // Ownership now belongs to the lambda return [a = std::move(psomething)]() { a->do_something(); // psomething is released after this point }; };
コピーおよび移動実装による所有権譲渡:
更新されたコードでは、さまざまなタイプの参照を処理するためにコピー関数と移動関数を定義しました。所有権を適切に譲渡するには、次の点を考慮してください。
これらの変更により、コードは期待どおりに機能し、保存されるはずです。ラムダ式内の所有権。
以上がC で「unique_ptr」の所有権を Lambda に適切に移すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。