================
@@ -0,0 +1,36 @@
+.. title:: clang-tidy - bugprone-capturing-this-in-member-variable
+
+bugprone-capturing-this-in-member-variable
+==========================================
+
+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
+    assert(v2.Captured() == v1.Captured()); // v2.Captured capture v1's 'this' 
pointer
+    assert(v2.Captured() == &v2); // assertion failed.
+  }
+
+Possible fixes include refactoring the function object into a class member
----------------
denzor200 wrote:
The first possible fix is ​​to make the class completely uncopyable. In 90% of 
cases, the real reason for this warning is that someone forgot to disallow 
copying.

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

Reply via email to