Does this get free'd anywhere?  You should probably call cdio_destroy before this (if cdio_ is not NULL), and in the destructor as well.