================ @@ -0,0 +1,37 @@ +.. title:: clang-tidy - bugprone-capturing-this-by-field + +bugprone-capturing-this-by-field +================================ + +Finds lambda captures that capture the ``this`` pointer and store it as class +members without handle the copy and move constructors and the assignments. + +Capture this in a lambda and store it as a class member is dangerous because the +lambda can outlive the object it captures. Especially when the object is copied +or moved, the captured ``this`` pointer will be implicitly propagated to the +new object. Most of the time, people will believe that the captured ``this`` +pointer points to the new object, which will lead to bugs. + + +.. code-block:: c++ + + struct C { + C() : Captured([this]() -> C const * { return this; }) {} + std::function<C const *()> Captured; + }; + + void foo() { + C v1{}; + C v2 = v1; // v2.Captured capture v1's this pointer ---------------- HerrCai0907 wrote:
I don't understand it well. Do you mean we need more document about how to limit it? And mention dangling this in docs also? https://github.com/llvm/llvm-project/pull/130297 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits