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:
1 2 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:
1 2 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
} |