Angenommen, ich habe einen RAH-Stil C++ Klasse:Kann verhindert werden, dass eine Klasse im RAII-Stil "anonym" instanziiert wird?
class StateSaver
{
public:
StateSaver(int i) { saveState(); }
~StateSaver() { restoreState(); }
};
... wie so in meinem Code verwendet werden:
void Manipulate()
{
StateSaver save(1);
// ...do stuff that modifies state
}
... das Ziel einige Zustand einzutreten ist, tun Zeug, dann verlasse diesen Zustand, wenn ich diesen Bereich verlasse. Gibt es eine Möglichkeit, diesen Tippfehler nicht zu kompilieren (oder zu warnen, oder sich irgendwie zu beschweren, damit der Fehler bemerkt werden kann)?
void Manipulate()
{
StateSaver(1); // ruh-roh, state saved and immediately restored!
// ...do stuff that modifies state
}
Ich bin mir nicht bewusst etwas in C++ selbst, das ich dies zu verhindern verwenden könnte, aber das bedeutet nicht, es existiert nicht. Wenn in C++ nichts vorhanden ist, sind Compiler-spezifische Erweiterungen akzeptabel. Ich interessiere mich hauptsächlich für alles, was auf GCC und MSVC abzielt (ein Icc-Tag, Ideen für andere Compiler sind willkommen, aber weniger wahrscheinlich, dass sie nützlich sind), also wären Hacks für alle nützlich (abstrahiert in geeignete # ifdef-Makrodefinitionen). .
SaveMatrix(): -> Sieht für mich wie ein Funktionsaufruf. –
SaveMatrix save(): -> Sieht für mich wie eine Funktionsdeklaration aus. –