Tengo una serie de clases que me gustaría explícitamente no permitir la asignación de montón. Se me ocurrió este fin de semana que podría declarar operador nuevo privado (y no implementado) ... Efectivamente, esto da como resultado errores de compilación cuando intentas volver a la clase ... Mi pregunta es: ¿hay más en esto? ¿Me estoy perdiendo algo o es esta una buena manera de hacer lo que quiero?Rechazar explícitamente la asignación de montón en C++
#include <stdio.h>
class NotOnTheHeap
{
public:
NotOnTheHeap() : foo(0)
{
}
private:
void *operator new(size_t);
void operator delete(void*);
void *operator new[](size_t);
void operator delete[](void*);
int foo;
};
class Heapable
{
private:
NotOnTheHeap noth;
};
int main(int argc, char* argv[])
{
NotOnTheHeap noth;
Heapable* heapable = new Heapable;
return 0;
}
¿Por qué quiere restringir estas clases? – GManNickG
@GManNickG Es posible que desee restringirlo por razones de rendimiento y arquitectura. Por qué se puede instruir a los programadores para que no lo hagan, es bueno tener las cosas en su lugar que * ayuden * a lograr esto. Por lo tanto, se detectan infracciones accidentales o no intencionadas de la regla. Probablemente sea más simple si su propia clase pudiera hacer cumplir esto en vez de intentar escribir una regla de análisis estático para hacerlo. – iheanyi