RAII에서 리소스는 액세스 될 때까지 초기화되지 않습니다. 그러나 많은 액세스 메소드가 상수로 선언됩니다. mutable
(비 const) 함수를 호출하여 데이터 멤버를 초기화해야합니다.RAII : const 메서드의 데이터 멤버 초기화
예 : 데이터베이스로부터 불러오는
struct MyClass
{
int get_value(void) const;
private:
void load_from_database(void); // Loads the data member from database.
int m_value;
};
int
MyClass ::
get_value(void) const
{
static bool value_initialized(false);
if (!value_initialized)
{
// The compiler complains about this call because
// the method is non-const and called from a const
// method.
load_from_database();
}
return m_value;
}
프리미티브 내 용액으로서 mutable
데이터 멤버를 선언 할 수있다. 나는 다른 방법으로 회원을 바꿀 수 있다고 제안하기 때문에 이것을하지 않을 것입니다.
컴파일러 오류를 제거하기 위해 load_from_database()
문을 캐스팅하는 방법은 무엇입니까?
getXXX 함수의 첫 번째 호출에 다소 시간이 걸릴 수 있음을 사용자에게 알리십시오. 또는 사용자가 성능이 중요한 임계 영역에서 처음으로 해당 함수를 호출 할 수도 있습니다. – smerlin
@Thomas Matthews, Here 's RAII가 실제로 무엇인지 설명하는 링크 http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization – Glen
모든 getXXX 함수를 한 번 호출 할 수있는 추가 init 함수를 제공 할 수 있거나 제공해야합니다 ... 사용자가 원하는 기능을 호출하지 못하게 할 수 있습니다 지연 초기화 – smerlin