TL;DR: Use PL_BLOB_DEFINITION() to define the blob with the 
flag
PL_BLOB_NOCOPY and the default PlBlob 
wrappers; define your struct as a subclass of PlBlob with 
no copy constructor, move constructor, or assignment operator; create a 
blob using
std::unique_ptr<PlBlob>(new ...), call PlTerm::unify_blob(). 
Optionally, define one or more of: compare_fields(), write_fields(),
save(), load() methods (these are described after the 
sample code).