diff --git a/priority_queue/src/priority_queue.hpp b/priority_queue/src/priority_queue.hpp index 1c10465..35ce711 100644 --- a/priority_queue/src/priority_queue.hpp +++ b/priority_queue/src/priority_queue.hpp @@ -82,7 +82,12 @@ class priority_queue { */ void push(const T &e) { Node *new_node = new Node(e); - root = SkewMerge(root, new_node); + try { + root = SkewMerge(root, new_node); + } catch (...) { + delete new_node; + throw; + } ++node_count; } /** @@ -111,6 +116,7 @@ class priority_queue { * clear the other priority_queue. */ void merge(priority_queue &other) { + if (other.root == root) return; root = SkewMerge(root, other.root); node_count += other.node_count; other.root = nullptr;