Memory Ownership Conventions
One reason the C++ Class Library is easy to use is that it relieves developers of concerns about memory allocation. All memory used by the objects themselves is handled by their own methods. Users of the classes never have to allocate or free any pointers.
This design has two important consequences:
- For all strings passed into objects as method arguments, the objects takes care of managing the string. If the object needs the string beyond the execution time of the method it will make a copy of the string. The caller is never responsible for maintaining a copy of a passed-in string pointer.
- All strings returned by methods are owned by the object that returned it. Callers do not have to free them (should not free them!) because the object destructors will free them. When the object is destroyed or closed, the strings are freed. Strings returned by methods may be freed at other times. For instance when an OField returns a database value as a string it owns the string. Later, if you ask the same OField object for the database values as a string again (perhaps the dynaset has been navigated to another record) the old string will be freed. The OField only keeps the most current string. The valid lifetimes of returned strings is discussed in the documentation for each method that returns a string pointer.