RAII 스타일의 C++ 클래스가 있다고 가정 해 보겠습니다.RAII 스타일의 클래스가 "익명으로"인스턴스화되는 것을 방지 할 수 있습니까?
class StateSaver
{
public:
StateSaver(int i) { saveState(); }
~StateSaver() { restoreState(); }
};
... 내 코드 에서처럼 사용할 수 있습니다.
void Manipulate()
{
StateSaver save(1);
// ...do stuff that modifies state
}
... 어떤 상태로 들어가는 것이 목표입니까? 그 범위를 떠나면 그 상태로 두십시오. 이 오타를 컴파일하지 못하게하는 방법이 있습니까 (또는 경고하거나 어떻게 불만을 제기하여 실수를 알 수 있습니까)?
void Manipulate()
{
StateSaver(1); // ruh-roh, state saved and immediately restored!
// ...do stuff that modifies state
}
나는 C++에서이 문제를 방지하기 위해 사용할 수있는 것을 전혀 모르고 있지만, 그것이 존재하지 않는다는 것을 의미하지는 않습니다. C++에 아무 것도 없으면 컴파일러에 특정한 확장이 허용 될 것입니다. 나는 gcc와 msvc (언젠가 icc, 다른 컴파일러에 대한 아이디어가 유용 하겠지만 덜 유용 할 것입니다)를 목표로하는 것에 관심이 있습니다. 그래서 그들 중 하나의 해킹이 유용 할 것입니다 (적절하게 #defdef 된 매크로 정의로 추상화됩니다) .
SaveMatrix() -> 나 함수 호출처럼 보인다. –
SaveMatrix save() : -> 나에게 함수 선언처럼 보입니다. –