# Upgrading from Simplygon C++ API 9.1 and earlier to Simplygon C++ API 9.2 and later

Simplygon is mostly source code compatible within major (7.x, 8.x, 9.x) versions, but has source code breaking changes between major versions.

However, with Simplygon 9.2 C++ API, there are some minor non-backwards-compatible changes for some users. These changes are documented below.

# I-objects are removed

The I-objects, such as IObject or IRealArray are removed from the interface, and all functionality is directly available in the sp-object counterparts, (such as spObject or spRealArray). This makes little difference to most implementations, as the interface mostly has used the sp-objects. However, if you your code base uses SafeCast in the I-objects, as:

// Simplygon 9.1 and earlier used this code:
Simplygon::spObject myobject = IObject::SafeCast( otherptr.GetInterface() );

this should now be replaced with the SafeCast method in the sp-object, like:

// Simplygon 9.2 and later use this code:
Simplygon::spObject myobject = spObject::SafeCast( otherptr );

# C++ nullptr no longer supported in sp-objects

With Simplygon 9.2, the C++ API no longer supports silently converting a nullptr to an empty interface object, like so:

// Simplygon 9.1 and earlier accepted this code:
Simplygon::spObject myobject = nullptr;

In Simplygon 9.2 and later, you instead can use an empty constructor, or the new Simplygon::NullPtr constant:

// In Simplygon 9.2 and later, use one of these initializers instead, which will all create an empty interface pointer:
Simplygon::spObject myobject1;
Simplygon::spObject myobject2 = Simplygon::spObject();
Simplygon::spObject myobject3 = Simplygon::NullPtr;

# GetInterface() is renamed to _GetHandle()

In very rare debug circumstances, a user might want to retrieve the internal pointer to an interface, and that used to be done through the spObject::GetInterface() method. This method is now renamed to spObject::_GetHandle() to mark it as for internal use.