I think with your edited question, the answer will be a definite "No".
You are also confused about new operators and new expressions (there is no such thing as ::new() , there are only ::new and ::operator new() ), so it might be best to break this.
When you write T * p = new T; , where T has an overloaded operator-new, then a sequence equivalent to the following occurs:
void * addr = T::operator new(sizeof(T));
A function call in # 1 matters. Is this call thread safe? Well, it totally depends on how you define this function! There is nothing in the standard that guarantees any particular behavior of this function, which in the end is a completely normal function.
The only thing that the standard (or new), or the compiler provider, is that the global function void * ::operator new(std::size_t) throw(std::bad_alloc); provided by default is thread safe. Therefore, if you write your own function using this, you are fine; otherwise you yourself:
struct Foo { static void * operator new(size_t n) { return ::operator new(n); }
source share