The C API is intended for developers of other libraries. Special carre needs to be taken for correct memory management.
When working with libcaosdb’s C API keep the following in mind:
Delete all objects (transactions, entities, properties, parents, …) that you created using a
caosdb_..._create_... or released using
caosdb_..._release_... and only those.
Specifically, any objects set by a
caosdb_..._get_... function are managed by another owning
object (e.g., a connection object is managed by the connection manager) and thus should not be
The underlying reason is that all C++ objects are realized in the Extern C interface as mutable structs containing a void pointer to the actuall C++ object which is not filled when initializing the struct but after calling a create function instead. If the C++ object wasn’t created using a create function, e.g., the parent object when getting a parent of an entity, it is owned by another object and deleted together with that object.