In general, the global new and delete operators are implemented in a thread-safe manner: each invocation of either operator locks the heap before performing the allocation/deallocation of memory and when the action is completed, the heap is unlocked. Thus, you can use new and delete safely in multithreaded applications. However, the thread-safety of new and delete imposes an unnecessary runtime overhead for single-threaded applications. Therefore, in time-critical single-threaded application, you may consider using alternative memory management schemes such as overloading new and delete for particular classes or using a custom memory pool.