Fix: always close fd when destructing buffers

Also always rethrow exceptions not swallow them

Change-Id: I7a4b1e408858aa0d0128ca7bd6d6a7715662f9fb
diff --git a/driver_library/include/ethosu.hpp b/driver_library/include/ethosu.hpp
index 547e346..a12d668 100644
--- a/driver_library/include/ethosu.hpp
+++ b/driver_library/include/ethosu.hpp
@@ -129,7 +129,7 @@
 class Device {
 public:
     Device(const char *device = "/dev/ethosu0");
-    virtual ~Device();
+    virtual ~Device() noexcept(false);
 
     int ioctl(unsigned long cmd, void *data = nullptr) const;
     Capabilities capabilities() const;
@@ -141,7 +141,7 @@
 class Buffer {
 public:
     Buffer(const Device &device, const size_t capacity);
-    virtual ~Buffer();
+    virtual ~Buffer() noexcept(false);
 
     size_t capacity() const;
     void clear() const;
@@ -162,7 +162,7 @@
 public:
     Network(const Device &device, std::shared_ptr<Buffer> &buffer);
     Network(const Device &device, const unsigned index);
-    virtual ~Network();
+    virtual ~Network() noexcept(false);
 
     int ioctl(unsigned long cmd, void *data = nullptr);
     std::shared_ptr<Buffer> getBuffer();
@@ -215,7 +215,7 @@
         create(counterConfigs, enableCycleCounter);
     }
 
-    virtual ~Inference();
+    virtual ~Inference() noexcept(false);
 
     int wait(int64_t timeoutNanos = -1) const;
     const std::vector<uint32_t> getPmuCounters() const;