devxlogo

User-Defined New and Delete Cannot be Declared in a Namespace

User-Defined New and Delete Cannot be Declared in a Namespace

Operators new and delete can be declared in a class scope. However, the Standard prohibits declarations of these operators in a namespace. Why is this? Consider the following example:

 char *pc; namespace A { void operator new ( size_t ); void operator delete ( void * );void func () {	  pc = new char ( 'a');}}void f() { delete pc; } // which version of delete to call, A::delete or standard delete? 

Some programmers would expect the operator A::delete to be selected since it matches the operator new that was used to allocate the storage. Others would expect the standard operator delete to be called since A::delete is not visible in function f. By prohibiting declarations of new and delete in a namespace, you can avoid this hassle.

devx-admin

Share the Post: