Fixing with try/catch void some_function(string name) { Person *fred = new Person(name); try { fred->setName(name); } catch (...) { delete fred; throw; } delete fred; }