================ @@ -0,0 +1,34 @@ +.. title:: clang-tidy - bugprone-incorrect-enable-shared-from-this + +bugprone-incorrect-enable-shared-from-this +========================================== + +Checks if a class or struct publicly inherits from +``std::enable_shared_from_this``, because unintended behavior will +otherwise occur when calling ``shared_from_this``. + +Consider the following code: + +.. code-block:: c++ + + #include <memory> + + // private inheritance + class BadExample : std::enable_shared_from_this<BadExample> { + + // ``shared_from_this``` unintended behaviour + // libstd implementation returns uninitialized ``weak_ptr`` + public: + BadExample* foo() { return shared_from_this().get(); } + void bar() { return; } + }; + + void using_not_public() { + auto bad_example = std::make_shared<BadExample>(); + auto* b_ex = bad_example->foo(); + b_ex->bar(); + } + +Using ``libstd`` implementation, ``shared_from_this`` will throw ---------------- EugeneZelenko wrote:
```suggestion Using `libstd` implementation, ``shared_from_this`` will throw ``` `libstdc++`? https://github.com/llvm/llvm-project/pull/102299 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits