<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
<div class="moz-text-flowed"
 style="font-family: -moz-fixed; font-size: 13px;" lang="x-western">Luis
Ibanez wrote:
<br>
<blockquote type="cite">&lt;snip&gt;
  <br>
  <br>
3) Please note that the construction
  <br>
  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const&nbsp;&nbsp;&nbsp; Image::ConstPointer &amp;&nbsp; ptr ....;
  <br>
  <br>
&nbsp;&nbsp;&nbsp; prevents the internal mechanisms of the SmartPointer
  <br>
&nbsp;&nbsp;&nbsp; from working, since the "const" keyword prevents the "ptr"
  <br>
&nbsp;&nbsp;&nbsp; variable from changing. (strictly speaking it prevents the
  <br>
&nbsp;&nbsp;&nbsp; smart pointer from calling the non-const method Register()
  <br>
&nbsp;&nbsp;&nbsp; on the object that it points to).
  <br>
</blockquote>
I take back what I said in the reply I just posted a minute ago (when
it comes through on the list) - you don't need to make Register() and
UnRegister() const methods, you just need to add a templated
constructor like this:
<br>
<br>
template &lt;typename T&gt;
<br>
&nbsp;&nbsp; SmartPointer(const SmartPointer&lt;T&gt;&amp; p)
<br>
&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp; m_Pointer(p.GetPointer())
<br>
&nbsp;&nbsp; { this-&gt;Register(); }
<br>
<br>
Not sure if that causes any obvious problems at all though? It should
only compile if p.GetPointer()'s type is convertible to m_Pointer's
type, so I can't see an obvious problem, but there may be other things
lurking that I've missed.
<br>
<br>
Cheers,
<br>
Stu
<br>
<blockquote type="cite">&nbsp; Regards,
  <br>
  <br>
  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Luis
  <br>
  <br>
&lt;snip&gt;<br>
</blockquote>
</div>
</body>
</html>