[clang-tools-extra] [clang-tidy] Add new check bugprone-capture-this-by-field (PR #130297)

Congcong Cai via cfe-commits cfe-commits at lists.llvm.org
Wed Mar 12 09:14:36 PDT 2025


================
@@ -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


More information about the cfe-commits mailing list