<br>Hi Peter,<br><br>This is a very interesting (and very useful) question.<br><br>You already pointed out some of the critical points,<br>so let me just expand in the following list:<br><br>For a new class to be able to use ITK SmartPointers<br>
you should:<br><br><br>1)  Derive from the itk::LightObject<br><br>2) Implement the New() operator.<br>
    This can be done by simply using the<br>
    itkNewMacro( Self ),<br>
    and of course, declaring the &quot;Self&quot; type.<br>
<br>3) Have a protected default constructor<br>    (constructor without arguments)<br><br>4) Have a protected destructor<br><br>5) Have a private declaration of the <br>    copy constructor (and not implement it)<br><br>
6) Have a private declaration of the<br>    operator=(), (and not implement it)<br><br><br><br>Note that items (3,4,5,6) are not really &quot;requirements&quot;<br>for getting the SmartPointer to work, they are actually<br>
intended to prevent users from misusing the class.<br>For example, they make impossible for you to use the<br>&quot;new&quot; operator, and therefore enforce the use of New().<br><br>Note that the class doesn&#39;t have to be put inside the<br>
&quot;itk&quot; namespace (although you could do it, if you find<br>it useful).<br><br><br>Here is the minimal example of a class that<br>uses ITK Smart Pointers:<br><br>--------------------------------------------------------<br>
#include &quot;itkLightObject.h&quot;<br>#include &quot;itkObjectFactory.h&quot;<br><br>class MyClass : public itk::LightObject<br>{<br>public:<br>  typedef MyClass Self;<br>  typedef itk::SmartPointer&lt; Self &gt;   Pointer;<br>
  typedef itk::SmartPointer&lt; const Self &gt; ConstPointer;<br><br>  itkNewMacro( Self );<br><br>protected:<br>  MyClass() {}<br>  virtual ~MyClass() {}<br><br>private:<br>  MyClass( const Self &amp; ); // not implemented<br>
  const Self &amp; operator=( const Self &amp; ); // not implemented<br>};<br><br><br>int main()<br>{<br>  MyClass::Pointer foo = MyClass::New();<br>  return 0;<br>}<br>--------------------------------------------------------<br>
<br><br><br>        Regards,<br><br><br>                Luis<br><br><br>-----------------------------------------------------------------------------<br><div class="gmail_quote">On Thu, Apr 15, 2010 at 8:25 PM, Pete79 <span dir="ltr">&lt;<a href="mailto:pkoniusz@hotmail.com">pkoniusz@hotmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
Dear all.<br>
<br>
Can you give me a simple example how to wrap my own class to provide it with<br>
Smart Pointer functionality? So far I&#39;ve gathered I really need to inherit<br>
from the LightObject class, what next?<br>
<br>
Let&#39;s say I have got the following:<br>
class MyClass: public LightObject<br>
{<br>
private:<br>
int member;<br>
public:<br>
MyClass(int memberC) : member(memberC) {}<br>
~MyClass() { do something; }<br>
};<br>
<br>
How can I wrap it up with SmartPointer?<br>
<br>
typedef typename SmartPointer&lt;MyClass&gt; MyClassSPT;<br>
<br>
What else?<br>
When I instantiate it with:<br>
MyClassSPT aaa=MyClass::New() it won&#39;t work fine I guess coz the constructor<br>
of MyClass takes a parameter as its argument.<br>
<br>
Can you give me the tips and snippets of the code which show how to deal<br>
with it?<br>
<br>
Many thanks,<br>
Peter<br>
<br>
<br>
--<br>
View this message in context: <a href="http://old.nabble.com/ITK-SmartPointers-and-my-own-class.-tp28261973p28261973.html" target="_blank">http://old.nabble.com/ITK-SmartPointers-and-my-own-class.-tp28261973p28261973.html</a><br>

Sent from the ITK - Users mailing list archive at Nabble.com.<br>
<br>
_____________________________________<br>
Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at<br>
<a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
<br>
Kitware offers ITK Training Courses, for more information visit:<br>
<a href="http://www.kitware.com/products/protraining.html" target="_blank">http://www.kitware.com/products/protraining.html</a><br>
<br>
Please keep messages on-topic and check the ITK FAQ at:<br>
<a href="http://www.itk.org/Wiki/ITK_FAQ" target="_blank">http://www.itk.org/Wiki/ITK_FAQ</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://www.itk.org/mailman/listinfo/insight-users" target="_blank">http://www.itk.org/mailman/listinfo/insight-users</a><br>
</blockquote></div><br>