Spamming std::move is the way to go?
<p>About <code>std::move</code>, here is what I can interpret,  according to <a href="http://en.cppreference.com/w/cpp/utility/move" rel="nofollow">http://en.cppreference.com/w/cpp/utility/move</a> :-</p>

<ul>
<li>If I want to transfer ownership, I have to call <code>std::move</code> (or in rare case, <code>std::forward</code>).   </li>
<li>Responsibility of <code>std::move</code> is calling <code>operator=(A&amp;&amp; other)</code>.    </li>
<li>The most essential step of the move operation is supposed to be implemented in <code>operator=(A&amp;&amp;)</code>.</li>
<li>It is tricky to ensure that <code>operator=(A&amp;&amp;)</code> would be called.    It need a special converter.</li>
<li>There are <strong>only</strong> two converters in the C++ world that can convert variables into <code>xvalue</code> (the &amp;&amp;) : <code>std::move</code> and <code>std::forward</code>.</li>
</ul>

<h2><strong>Question</strong></h2>

<p>After adding many of <code>std::move(std::unique_ptr)</code> in my code, I start to worry that for such basic feature like transfer ownership, I have to heavily rely on the standard library  (<code>std::</code>).    </p>

<p>Do I really have to use <code>std::move</code> to transfer ownership?  </p>

<p>Is spamming and hard-code calling <code>std::move</code> in many places of code-base a correct way to go for a high-standard program?</p>

<p>Should <code>std::move</code> be encapsulated?</p>

<p>They are actually a single question, but ask in different perspectives.</p>

<h2>Edit</h2>

<p>As request, here is my trial &amp; error.  It compiled ok.<br>
I have no problem about the code, but I worry about its approach / pattern.
<a href="https://ideone.com/y8Pcgf" rel="nofollow">https://ideone.com/y8Pcgf</a></p>

<pre><code>class T{
    public: int value;
    public: T(int a=1234){
        value = a;
    }
};
int main() {
    std::unique_ptr&lt;T&gt; t1 = std::unique_ptr&lt;T&gt;(new T(1));
    void* databaseNew=operator new [](sizeof(std::unique_ptr&lt;T&gt;));
    std::unique_ptr&lt;T&gt;* t1ptr=static_cast&lt;std::unique_ptr&lt;T&gt;*&gt;(databaseNew);
    new (t1ptr) std::unique_ptr&lt;T&gt;(std::move(t1));
    return 0;
}
</code></pre>