title: This code are theoretically there will be a double free, but why no repetition
body: <p>new Widget by two smart Pointer manager，so there will be a double free of problems, but does not appear after execution</p>
  
  <pre><code>std::vector&lt;std::shared_ptr&lt;Widget&gt;&gt; processedWidget;
  class Widget {
   public:
    void process();
  };
  void Widget::process()  {
    processedWidget.emplace_back(this); 
  }
  int main() {
   {
     std::shared_ptr&lt;Widget&gt; w(new Widget);
     w-&gt;process();
   }
    return 0;
  }
  </code></pre>