Supongamos que tengo una clase de estilo RAII C++:¿Es posible evitar que una clase de estilo RAII sea instanciada "anónimamente"?
class StateSaver
{
public:
StateSaver(int i) { saveState(); }
~StateSaver() { restoreState(); }
};
... para ser utilizado como tal en mi código:
void Manipulate()
{
StateSaver save(1);
// ...do stuff that modifies state
}
... siendo el objetivo de entrar en algún estado, hacer cosas, luego deja ese estado cuando salga de ese alcance. ¿Hay alguna forma de que este error no se compile (o advierta, o se queje de alguna manera para que se note el error)?
void Manipulate()
{
StateSaver(1); // ruh-roh, state saved and immediately restored!
// ...do stuff that modifies state
}
No estoy al tanto de cualquier cosa en C++ sí que podría utilizar para evitar esto, pero eso no quiere decir que no exista. Si no hay nada en C++, las extensiones específicas del compilador serían aceptables. Principalmente estoy interesado en cualquier cosa que tenga como objetivo gcc y msvc (algún día icc, las ideas para otros compiladores son bienvenidas pero es menos probable que sean útiles) así que los piratear para cualquiera de ellas serían útiles (abstraído en definiciones de macro # ifdef'd apropiadamente, por supuesto) .
SaveMatrix(): -> Parece que una llamada de función a mí. –
SaveMatrix save(): -> Parece una declaración de función para mí. –