The smart pointers do not work with basic types such as int, long, and char.
If you implement a key collection containing element pointers, you must define your key function with the element as input, not the pointer to the element, for example:
typedef IKeySortedSet<IMngElemPointer<Element>,int> keySortedSetOfPointers; int const& key(Element const& element) { return element.elementKey(); }
where elementKey returns the element's key.
An automatic pointer's copy constructor and assignment operator are defined in a way that resets the source pointer to NULL. This prevents multiple automatic pointers from pointing to the same element. In the following example, p2 is implicitly set to NULL:
IAutoPointer<SomeType> p1, p2; ... p1 = p2;
However, the copy constructor and assignment operator still take a const argument (using a const cast-away) to maintain compliance with the standard interface for these operations. This standard interface is required, for example, when you use these types as element types in collections, because the copy constructor and assignment operator are required to have such an interface. (Otherwise, the collection's add function could not take a const argument.)
If you want to create managed pointers for a collection and copy in elements from a second collection that already contains managed pointers, you cannot use IINIT because it will destroy the managed pointers in the second collection. To avoid this situation, you can use the following notation:
typedef IMngElemPointer<PersonPtr> MyClassPtr; typedef IKeySet<MyClassPtr> MyAddressList; MyClassPtr pMyClass; pMyClass = Business.elementWithKey(...);
In the above notation, Business is the collection from the previous examples, but here it is an IKeySet collection rather than an ISet collection so that elementWithKey can be used.
Introduction
to the Collection Classes
Collection
Class Hierarchy
Overall
Implementation Structure
Adding
Elements
Removing
Elements
Replacing
Elements
Smart
Pointers
Choosing the Appropriate
Smart Pointer Class
Constructing Smart
Pointers
Using Automatic
Pointers
Using Element Pointers
Using Managed
Pointers
Copying and
Referencing Collections
Instantiating the
Collection Classes