Smart Pointers Example ---------------------- This example shows the use of the various smart pointer classes available in ACE. There are two programs in this example. Each program implements a similar set of classes, but with a different style of using smart pointers. The Widget example is written such that objects may only pass raw pointers between them, and use smart pointers to manage the object lifetimes. An advantage of this style is the fine-grained control over the type of smart pointer used in each situation. For example, if you know that in a particular section of code there is no concurrency involved, you can strategise ACE_Refcounted_Auto_Ptr on ACE_Null_Mutex to eliminate locking overhead. Disadvantages of this style include greater programming complexity and certain ownership use cases not being easily supported. The Gadget example is written such that objects are always passed around using one of the ACE_Strong_Bound_Ptr/ACE_Weak_Bound_Ptr pair of smart pointers. The advantage of this style is the reduction in complexity of object lifetime management (almost as "good" as Java ;-) The disadvantage is that you pay a cost for the reference counting and locking overhead even in situations where it may not be strictly necessary.