Managing FdoPtr Behaviors

FDO API

 
Managing FdoPtr Behaviors
 
 
 

The topics in this section describe several ways that you can manager FdoPtr behavior. For more information about managing FdoPtr behavior, see the related topics “FdoPtr <T> Class Template Reference” and “FdoIDisposable Class Reference” in the FDO Reference Help and The Essential FDO.

Chain Calls

Do not chain calls. If you do, returned pointers will not be released. For example, given an FdoClassDefinition* pclassDef:

psz = pclassDef ->GetProperties()->GetItem(0)->GetName()) 

The above code would result in two memory leaks. Instead use:

FdoPropertyDefinitionCollection* pprops = pclassDef -> GetProperties();
  FdoPropertyDefinition* ppropDef = pprops->GetItem(0);
  psz = propDef->GetName();
  ppropDef->Release();
  pprops->Release();

or (with FdoPtr):

FdoPtr<FdoPropertyDefinitionCollection> pprops = pclassDef-> GetProperties();
  FdoPtr<FdoPropertyDefinition> ppropDef = pprops-> GetItem(0);
psz = propDef->GetName();

or (also with FdoPtr):

psz = FdoPtr <FdoPropertyDefinition> (FdoPtr <FdoPropertyDefinitionCollection>(pclassDef->GetProperties())-> GetItem(0))->GetName();

Assigning Return Pointer of an FDO Function Call to a Non-Smart Pointer

If you are assigning the return pointer of an FDO function call to a non-smart pointer, then you should assign that pointer to a FdoPtr. For example:

FdoLineString* P = gf.CreateLineString(...);
FdoPtr <FdoLineString> p2 = FDO_SAFE_ADDREF(p);