namespace et opérateur new
	
	
		Bonjour ! :D 
Je cherche à définir les opérateurs new et delete dans un namespace afin d'avoir la possibilité d'appeler le new prédéfini ou le new défini dans mon namespace.
Malheureusement, cela ne compile pas :
	Citation:
	
		
		
			---------------------------------------------------------------------------  
line 9: cc0732:  error:
    allocation operator may not be declared in a namespace
    void* operator new (size_t  size);
---------------------------------------------------------------------------
			
		
	
 Quelqu'un a une idée ??!!!!
voici le code :
	Code:
	
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 
 | #ifndef _CUSTOM_BASE_TYPE_NEW_H
#define _CUSTOM_BASE_TYPE_NEW_H
 
#include <cstdlib>
namespace CustomBaseTypeNew
{ 
  void* operator new (size_t  size)
  {
   void *p=malloc(size);
   if (p!=0)
   {
     return p;
   }
    else return NULL;
  }
 
  void operator delete (void *p)
  {	
    free(p); 
  }  
}
 
#endif //_CUSTOM_BASE_TYPE_NEW_H | 
 Merci !
[Balises CODE rajoutées par Loulou24, merci d'y penser à l'avenir]
	 
	
	
	
		Re: namespace et opérateur new
	
	
		
	Citation:
	
		
		
			
				Envoyé par Sylvain Rousseau
				
			
			Bonjour ! :D 
Je cherche à définir les opérateurs new et delete dans un namespace afin d'avoir la possibilité d'appeler le new prédéfini ou le new défini dans mon namespace.
			
		
	 
 Pour faire ça, tu peux déclarer un paramètre supplémentaire à new, et la surcharge fera le reste. C'est comme ça que marche le placement new.
	Citation:
	
		
		
			
				Envoyé par La norme 12.5.2
				
			
			
	Code:
	
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 
 | class Arena;
struct B {
  void* operator new(size_t, Arena*);
};
struct D1 : B {
};
Arena* ap;
void foo(int i)
{
  new (ap) D1; // calls B::operator new(size_t, Arena*)
  new D1[i]; // calls ::operator new[](size_t)
  new D1; // illformed:  ::operator new(size_t) hidden
} |