 <p>What you are understanding is correct. Here is an example:</p> <pre><code>string* str_rptr = new string("hello"); string* str2_rptr = str_rptr; str2_rptr-&gt;replace(0,5,"goodbye"); std::cout &lt;&lt; *str_rptr &lt;&lt; std::endl; </code></pre> <p>The output of this fragment would print "goodbye" rather than "hello". After the "perfect int" example you gave, this code:</p> <pre><code>y = 400; std::cout &lt;&lt; x &lt;&lt; std::endl; </code></pre> <p>will print out "200". The important point is that copying a variable does not prevent changes to one from changing the other.</p>