I mean if I create 1M threads (ofc not at the same time) with new and all of them finish, have I leaked anything permanently?
The destructor is called automatically when an object on the stack goes out of scope (or during stack unwinding when an exception has been caught).