diff options
author | Jade Lovelace <lix@jade.fyi> | 2024-03-09 22:05:50 -0800 |
---|---|---|
committer | Jade Lovelace <lix@jade.fyi> | 2024-03-11 01:04:52 -0700 |
commit | 45f6e3521a2b4f535e29d03dd077978a691bdb58 (patch) | |
tree | 4b3d40c745c64b78c80ea83cbdd1dd9e83e02823 | |
parent | af515baf6e4f1c5aa284e464766438b4c8fadd14 (diff) |
finally.hh: delete copy constructor which is a bad idea
Change-Id: I6d0b5736893c44bddc6f5789b452b434f8671b9b
-rw-r--r-- | src/libutil/finally.hh | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/libutil/finally.hh b/src/libutil/finally.hh index db654301f..49263ee6d 100644 --- a/src/libutil/finally.hh +++ b/src/libutil/finally.hh @@ -9,8 +9,15 @@ class Finally { private: Fn fun; + bool movedFrom = false; public: Finally(Fn fun) : fun(std::move(fun)) { } - ~Finally() { fun(); } + // Copying Finallys is definitely not a good idea and will cause them to be + // called twice. + Finally(Finally &other) = delete; + Finally(Finally &&other) : fun(std::move(other.fun)) { + other.movedFrom = true; + } + ~Finally() { if (!movedFrom) fun(); } }; |