'Return a new cdata object that points to the same
data.  Later, when this new cdata object is garbage-collected,
\'destructor(old_cdata_object)\' will be called.'

def gc(self, cdata, destructor):

    try:
        gcp = self._backend.gcp
    except AttributeError:
        pass
    else:
        return gcp(cdata, destructor)
    with self._lock:
        try:
            gc_weakrefs = self.gc_weakrefs
        except AttributeError:
            from .gc_weakref import GcWeakrefs
            gc_weakrefs = self.gc_weakrefs = GcWeakrefs(self)
        return gc_weakrefs.build(cdata, destructor)
