Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions lang/cpp17/lambda_capture_of_this_by_value.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
* cpp17[meta cpp]

## 概要
C++14までラムダ式で`[this]`のようにキャプチャをすると、`this`ポインタがコピーされていた。その場合、非同期処理のような状況で、ラムダ式の関数オブジェクトが呼び出されたときに、`this`ポインタが指すオブジェクトの寿命が付きている場合がある
C++14までラムダ式で`[this]`のようにキャプチャをすると、`this`ポインタがコピーされていた。その場合、非同期処理のような状況で、ラムダ式の関数オブジェクトが呼び出されたときに、`this`ポインタが指すオブジェクトの寿命が尽きている場合がある

C++17では`[*this]`のようにキャプチャすることで、キャプチャ時点での`*this`オブジェクトをコピーできるようになった。

Expand All @@ -11,7 +11,7 @@ C++17では`[*this]`のようにキャプチャすることで、キャプチャ

## 備考
- `[*this]`でコピーキャプチャしたオブジェクトは、デフォルトで`const`になるので注意。`[this]`はポインタであるため書き換えができ、非`const`メンバ関数を呼び出せる。しかし、`[*this]`はオブジェクトをコピーして`const`となるため、ラムダ式に`mutable`を付けない限り、非`const`メンバ関数を呼び出せない。
- ラムダ式の関数オブジェクトが呼び出されたときに、`this`ポインタの寿命が付きる場合があることが正しい状況では、依然として[`std::weak_ptr`](/reference/memory/weak_ptr.md)のような機能を使用して、生死監視をする必要がある。
- ラムダ式の関数オブジェクトが呼び出されたときに、`this`ポインタの寿命が尽きる場合があることが正しい状況では、依然として[`std::weak_ptr`](/reference/memory/weak_ptr.md)のような機能を使用して、生死監視をする必要がある。


## 例
Expand Down