The free store operators new, delete, new[], and delete[] are implemented using functions:
  void* operator new(size_t); // space for individual object
  void operator delete(void*);
  void* operator new[](size_t); // space for array
  void operator delete[](void*);

 

  The static_cast operator converts between related types such as one pointer type to another, an enumeration to an integral type, or a floating point type to an integral type. The reinterpret_cast handles conversions between unrelated types such as an integer to a pointer. This distinction allows the compiler to apply some minimal type checking for static_cast and makes it easier for a programmer to find the more dangerous conversions represented as reinterpret_casts. Some static_casts are portable, but few reinterpret_casts are. Hardly any guarantees are made for reinterpret_cast, but generally it produces a value of a new type that has the same bit pattern as its argument. If the target has at least as many bits as the original value, we can reinterpret_cast the result back to its original type and use it. The result of a reinterpret_cast is guaranteed to be usable only if its result type is the exact type used to define the value involved. Note that reinterpret_cast is the kind of conversion that must be used for pointers to functions.