aboutsummaryrefslogtreecommitdiff
path: root/src/libutil/finally.hh
diff options
context:
space:
mode:
authorJade Lovelace <lix@jade.fyi>2024-03-09 22:05:50 -0800
committerJade Lovelace <lix@jade.fyi>2024-03-11 01:04:52 -0700
commit45f6e3521a2b4f535e29d03dd077978a691bdb58 (patch)
tree4b3d40c745c64b78c80ea83cbdd1dd9e83e02823 /src/libutil/finally.hh
parentaf515baf6e4f1c5aa284e464766438b4c8fadd14 (diff)
finally.hh: delete copy constructor which is a bad idea
Change-Id: I6d0b5736893c44bddc6f5789b452b434f8671b9b
Diffstat (limited to 'src/libutil/finally.hh')
-rw-r--r--src/libutil/finally.hh9
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(); }
};