FUniqueBuffer and FSharedBuffer offer static functions to create a buffer using private buffer owner types that are ideal for most use cases. The TakeOwnership function allows creation of a buffer with a custom delete function. Advanced use cases require deriving from FBufferOwner to enable storage of arbitrary members alongside the data and size, and to enable materialization of the buffer to be deferred.