there could have been memory leaks and undefined behaviors if the objects destructors were not called and the object it pooled contained objects that are constructed (like std::string)