]> granicus.if.org Git - clang/commitdiff
Documentation: improve description of make_shared transformation, as suggested by...
authorDmitri Gribenko <gribozavr@gmail.com>
Fri, 26 Apr 2013 20:20:30 +0000 (20:20 +0000)
committerDmitri Gribenko <gribozavr@gmail.com>
Fri, 26 Apr 2013 20:20:30 +0000 (20:20 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@180627 91177308-0d34-0410-b5e6-96231b3b80d8

docs/ClangTools.rst

index c3303c7248b97ed1b26f4a1310430122f02b14a8..d7f03a53ae4dbdd5b65560f10c8714c2ae9c170e 100644 (file)
@@ -124,14 +124,16 @@ Ideas for new Tools
   ``foo.begin()`` into ``begin(foo)`` and similarly for ``end()``, where
   ``foo`` is a standard container.  We could also detect similar patterns for
   arrays.
-* ``make_shared`` / ``make_unique`` conversion.  This transformation can be
-  incorporated into the ``auto`` transformation.  Will convert
+* ``make_shared`` / ``make_unique`` conversion.  Part of this transformation
+can be incorporated into the ``auto`` transformation.  Will convert
 
   .. code-block:: c++
 
     std::shared_ptr<Foo> sp(new Foo);
     std::unique_ptr<Foo> up(new Foo);
 
+    func(std::shared_ptr<Foo>(new Foo), bar());
+
   into:
 
   .. code-block:: c++
@@ -139,6 +141,10 @@ Ideas for new Tools
     auto sp = std::make_shared<Foo>();
     auto up = std::make_unique<Foo>(); // In C++14 mode.
 
+    // This also affects correctness.  For the cases where bar() throws,
+    // make_shared() is safe and the original code may leak.
+    func(std::make_shared<Foo>(), bar());
+
 * ``tr1`` removal tool.  Will migrate source code from using TR1 library
   features to C++11 library.  For example: