The destructor closes the file descriptor, but does not check errors on ::close().
In normal program flow, it is a good idea to explicitly call ManagedNamedFileDescriptor::close() in places where it can throw safely.