Managing memory with the SDK manager
 
 
 

Class KFbxSdkManager (sometimes called the SDK manager) is the memory manager for FBX SDK. You will use it whenever you instantiate an FBX object, and again whenever you destroy the object. An FBX application typically begins by creating an SDK manager object. Normally, an FBX application needs one and only one SDK manager object.

This code snippet declares an SDK manager object and later instantiates it:

KFbxSdkManager* mySdkManager = NULL;
...
mySdkManager = KFbxSdkManager::Create();

Almost all classes in FBX SDK have a Create() method and a Destroy() method.

To instantiate (create) an object of an FBX class:

  1. Call the class’s Create() method.
  2. Pass your application’s SDK manager object as a parameter.

For example:

// Create a scene object
KFbxScene* myScene = KFbxScene::Create(mySdkManager, "");
 
// Create a node object
KFbxNode* myNode = KFbxNode::Create(mySdkManager, "");
 
// Create an importer object
KFbxImporter* myImporter = KFbxImporter::Create(mySdkManager, "");

The SDK manager object that you pass as a parameter is responsible for allocating memory for the FBX object that you are creating.

NoteNormally, an FBX application needs only one SDK manager object. You can, however, create more than one.

The second parameter is an optional name for the object:

// Create a scene object named My Scene
KFbxScene* myScene = KFbxScene::Create(mySdkManager, "My Scene");
 
// Create a node object named My Node
KFbxNode* myNode = KFbxNode::Create(mySdkManager, "My Node");
 
// Create an importer object named My Importer
KFbxImporter* myImporter = KFbxImporter::Create(mySdkManager, "My Importer");

To destroy an object of an FBX class:

// Destroy three objects
myImporter->Destroy();
myNode->Destroy();
myExporter->Destroy();

Notes on destroying an object:

To clean up memory after using FBX SDK:

This will also destroy any remaining SDK objects managed by that SDK Manager.

// Delete the FBX SDK manager.
// All the objects that
// (1) have been allocated by the memory manager, AND that
// (2) have not been explicitly destroyed
// will be automatically destroyed.
if (pSdkManager) pSdkManager->Destroy();