Olá!
O que seria o operador new de posicionamento?
Ta... eu sei que a função dele é alocar memória. xD
Mas qual a utilidade dele? Por que implementar e usar ele ao invés do new comum?
Pelo que eu vi na internet, cria-se uma classe (normalmente chamada Arena) para gerenciar memória juntamente ao operador new sobrecarregado.
Mas não compreendi a essência disso tudo.
Segue o exemplo do livro do Stroustrup modificado:
Código PHP:
struct X {
X(int ii) { i = ii; }
~X() { /* ... */ }
int i;
};
class Arena {
public:
virtual void* alloc(size_t sz) = 0;
virtual void free(void* p) = 0;
// ...
};
void* operator new(size_t sz, Arena* a) {
return a->alloc(sz);
}
extern Arena* Persistent;
extern Arena* Shared;
void g(int i) {
X* p = new(Persistent) X(i);
X* q = new(Shared) X(i);
// ...
}
void destruct(X* p, Arena* a) {
p->~X();
a->free(p);
}