title: C++ smart pointers confusion
body: <p>I understand that in the C++ realm it is advocated to use smart pointers. I have a simple program as below.</p>
  
  <pre><code>/* main.cpp */
  #include &lt;iostream&gt;
  #include &lt;memory&gt;
  using namespace std;
  
  /* SQLite */
  #include "sqlite3.h"
  
  int main(int argc, char** argv)
  {
      // unique_ptr&lt;sqlite3&gt; db = nullptr; // Got error with this
      shared_ptr&lt;sqlite3&gt; db = nullptr;
  
      cout &lt;&lt; "Database" &lt;&lt; endl;
      return 0;
  }
  </code></pre>
  
  <p>When I compile with unique_ptr line got an error message:</p>
  
  <pre><code>error C2027: use of undefined type 'sqlite3'
   error C2338: can't delete an incomplete type
  </code></pre>
  
  <p>When I compile with shared_ptr line it is successful. From several questions and answers my understanding is that unique_ptr should be preferred as I do not intended to have objects sharing resources. What is the best solution in this case? Use shared_ptr or go back to the old approach of bare pointers (new/delete)?</p>