Kent,

Sorry for snow balling your topic which was almost ready to go :) But I think 
discussing the best practices for these issues is important.

Regarding how best to implement and document usage of default methods. Just 
another option is:

C++x11 adds some interesting ways to define implicit methods as "default" or 
"deleted":

http://en.cppreference.com/w/cpp/language/as_operator

Basically you can add a "= default" or "= delete" after a declaration for 
certain methods like assignment operator, copy constructor, default 
constructor, etc.

It would be plausible to use a macro for these situations that would do the 
C++x11 thing only when available. Say named ITK_IMPLICIT_DEFAULT and 
ITK_IMPLICIT_DELETE.

The one advantage for this would be that is a developer tried to reimplement 
one of these methods there would be a compiler error on C++x11 systems.

Beyond core ITK object I don't think its worth consider exception safety.

Brad


On Apr 2, 2013, at 9:57 AM, "Williams, Norman K" <[email protected]> 
wrote:

> I agree in principle with using the implicit destructor/copy
> constructor/operator= but as we've discussed, perhaps these should be
> documented in a comment/Doxygen.
> If someone changes the class to require a non-default version, they need
> to know they're responsible for adding one.  Compilers are no help as far
> as I know.
> 
> Default copy/operator= is good enough in most cases; for each instance var
> it does an assignment. Brad King (and
> http://www.cplusplus.com/articles/y8hv0pDG/ ) make the point that if
> there's any circumstances where an exception could be thrown, an
> exception-safe copy constructor/operator= should be provided, and use the
> copy/swap pattern.
> 
> As for ITK object types, default copy/operator= could be scary.  That's
> why it was a good design decision to use the SmartPointer/Factory pattern
> for object creation.
> 
> There isn't a problem for having SmartPointer members per-se -- their
> explicit operator= should do the thread-safe copy and reference count.  Of
> course a distinction needs to be very clear between a shallow copy and a
> deep copy that doesn't copy the object reference but creates a new object
> with the same contentÅ 
> 
> --
> Kent Williams [email protected]
> 
> 
> 
> 
> 
> 
> On 4/1/13 2:49 PM, "Bradley Lowekamp" <[email protected]> wrote:
> 
>> Kent,
>> 
>> In looking at your patch a large number of the operator= methods do what
>> the the C++ implicit implementation would do. If the compiler will
>> generate and maintain the method for use I think we should use it. It'll
>> decrease the likely hood of errors being made when new IVARS are added to
>> these classes.
>> 
>> Similarly, there are ALOT of destructors which are empty and could be
>> removed to just use the C++ implicit one.
>> 
>> Should we use these implicit methods in ITK?
>> Should be require a comment that the method is implicitly defined?
>> 
>> Brad
>> 
>> On Mar 28, 2013, at 11:41 AM, Brad King <[email protected]> wrote:
>> 
>>> On 03/28/2013 11:29 AM, Williams, Norman K wrote:
>>>> There is a standard way to poison assignment and copy constructor,
>>>> which
>>>> is to declare them protected and then not implement them.  This is
>>>> implemented consistently across all classes that derive ultimately from
>>>> itk::LightObject.
>>> 
>>> I meant that *those* poisoned operators return void.  Others should not.
>>> 
>>>> The copy/swap paradigm is recommended a lot of places. I haven't
>>>> encountered a case in ITK that it would make a difference.  The usual
>>>> pattern suggested is
>>>> 
>>>> X& operator=(const X &x)
>>>> {
>>>> X tmp(x);
>>>> swap(*this,x);
>>> 
>>> s/x/tmp/
>>> 
>>> However, see here for why to pass by value:
>>> 
>>> 
>>> http://stackoverflow.com/questions/3279543/what-is-the-copy-and-swap-idio
>>> m
>>> http://cpp-next.com/archive/2009/08/want-speed-pass-by-value/
>>> 
>>> -Brad
>>> _______________________________________________
>>> Powered by www.kitware.com
>>> 
>>> Visit other Kitware open-source projects at
>>> http://www.kitware.com/opensource/opensource.html
>>> 
>>> Kitware offers ITK Training Courses, for more information visit:
>>> http://kitware.com/products/protraining.php
>>> 
>>> Please keep messages on-topic and check the ITK FAQ at:
>>> http://www.itk.org/Wiki/ITK_FAQ
>>> 
>>> Follow this link to subscribe/unsubscribe:
>>> http://www.itk.org/mailman/listinfo/insight-developers
>> 
>> _______________________________________________
>> Powered by www.kitware.com
>> 
>> Visit other Kitware open-source projects at
>> http://www.kitware.com/opensource/opensource.html
>> 
>> Kitware offers ITK Training Courses, for more information visit:
>> http://kitware.com/products/protraining.php
>> 
>> Please keep messages on-topic and check the ITK FAQ at:
>> http://www.itk.org/Wiki/ITK_FAQ
>> 
>> Follow this link to subscribe/unsubscribe:
>> http://www.itk.org/mailman/listinfo/insight-developers
> 
> 
> 
> ________________________________
> Notice: This UI Health Care e-mail (including attachments) is covered by the 
> Electronic Communications Privacy Act, 18 U.S.C. 2510-2521, is confidential 
> and may be legally privileged.  If you are not the intended recipient, you 
> are hereby notified that any retention, dissemination, distribution, or 
> copying of this communication is strictly prohibited.  Please reply to the 
> sender that you have received the message in error, then delete it.  Thank 
> you.
> ________________________________

_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html

Kitware offers ITK Training Courses, for more information visit:
http://kitware.com/products/protraining.php

Please keep messages on-topic and check the ITK FAQ at:
http://www.itk.org/Wiki/ITK_FAQ

Follow this link to subscribe/unsubscribe:
http://www.itk.org/mailman/listinfo/insight-developers

Reply via email to