This is a simple question:
Does the new operator use a type pointer (void *)? Referring to What is the difference between new / delete and malloc / free? answer - it says new returns a fully typed pointer while malloc void *
But according to http://www.cplusplus.com/reference/new/operator%20new/
throwing (1) void* operator new (std::size_t size) throw (std::bad_alloc); nothrow (2) void* operator new (std::size_t size, const std::nothrow_t& nothrow_value) throw(); placement (3) void* operator new (std::size_t size, void* ptr) throw();
which means that it returns a pointer of type (void *), if it returns (void *), I never saw code like MyClass * ptr = (MyClass *) new MyClass;
I'm confused.
EDIT
By http://www.cplusplus.com/reference/new/operator%20new/ example
std::cout << "1: "; MyClass * p1 = new MyClass; // allocates memory by calling: operator new (sizeof(MyClass)) // and then constructs an object at the newly allocated space std::cout << "2: "; MyClass * p2 = new (std::nothrow) MyClass; // allocates memory by calling: operator new (sizeof(MyClass),std::nothrow) // and then constructs an object at the newly allocated space
So, MyClass * p1 = new MyClass calls operator new (sizeof(MyClass)) , and since throwing (1)
void* operator new (std::size_t size) throw (std::bad_alloc); throwing (1)
void* operator new (std::size_t size) throw (std::bad_alloc); it should return (void *) if I understand the syntax correctly.
thanks
source share