E D R , A S I H C RSS

Full text search for "LargeObject"

Large Object


Search BackLinks only
Display context of search results
Case-sensitive searching
  • MoreEffectiveC++/Efficiency . . . . 26 matches
          class LargeObject { // 크고, 계속 유지되는 객체들
          LargeObject(ObjectID id); // 디스크에서 객체의 복구(부르기)
         자 그럼 디스크에서 복구(자료를 부르기)되어지는 LargeObject의 비용을 생각해 보자:
          LargeObject object(id);
         LargeObject 인스턴스들이 크기 때문에 그런 객체에서 모든 데이터를 얻는 것은, 만약에 특별히 데이터 베이스가 외부에 네크워크 상에서 자료 로드가 있다면 데이터 베이스의 작업은 비쌀것이다. 몇몇 상황에서 모든 데이터 베이스를 읽어들이는 비용은 필요가 없다. 예를 들어서 다음의 어플리케이션의 종류에 관하여 생각해 보자.
          LargeObject object(id);
         lazy 로의 접근에서 이런 문제는 LargeObject가 만들어 질때 디스크에서 아무런 데이터를 읽어 들이지 않는 것이다. 대신에 오직 객체의 "껍데기"(shell)만 만들어 주고, 데이터는 객체 내부에서 특정 데이터를 필요로 할때만 데이터 베이스에서 데이터를 복구하는 것이다. 여기 그런 관점에서 "damand-paged" 방식으로 객체 초기화를 적용한 방법이 있다.
          class LargeObjectP
          LargeObject(ObjectID id);
          LargeObject::LargeObject(ObjectID id):oid(id), field1Value(0), field2Value(0), field3Value(0), ...
          const string& LargeObject::field() const
         객체의 각 필드는 필요한 데이터의 포인터로 표현되어 있고, LargeObject의 생성자는 null로 초기화 된다. 그런 null 포인터는 아직 데이터 베이스에서 해당 필드의 정보를 안읽었다는 걸 의미한다. 데이터를 접근하기 전에 LargeObject의 각 멤버 함수는 반드시 이 필드의 포인터를 검사한다. 만약 포인터가 null이라면 데이터를 사용하기 전에 반드시 데이터 베이스에서 읽어 온다.
         '''lazy fetching'''을 적용 하면, 당신은 반드시 field1과 같은 const멤버 함수를 포함하는 어떠한 멤버 함수에서 실제 데이터 포인터를 초기화하는 과정이 필요한 문제가 발생한다.(const를 다시 재할당?) 하지만 컴파일러는 당신이 const 멤버 함수의 내부에서 데이터 멤버를 수정하려고 시도하면 까다로운(cranky) 반응을 가진다. 그래서 당신은 "좋와, 나는 내가 해야 할것을 알고있어" 말하는 방법을 가지고 있어야만 한다. 가장 좋은 방법은 포인터의 필드를 mutable로 선언해 버리는 것이다. 이것의 의미는 어떠한 멤버 함수에서도 해당 변수를 고칠수 있다는 의미로, 이렇게 어떠한 멤버 함수내에서도 수행할수 있다. 이것이 LargeObject안에 있는 필드들에 mutable이 모두 선언된 이유이다.
          class LargeObject {
          const string& LargeObject::field1() const
          // LargeObject* 하고 const가 뒤에 붙어 있기 때문에 LargeObject* 자체는 const가 아닌 셈이다.
          LargeObject * const fakeThis = const_cast<LargeObject* const>(this);
          const string& LargeObject::field1() const
          LargeObject * const fakeThis = (LargeObject* const)(this);
         자, 그럼 다시 한번 LargeObject내의 포인터들에 관하여 생각해 보자. 사용하기전에 각각의 포인터들을 검사하는 것에 비해서, 모든 포인터들이 null로 초기화 되어 있는것은 에러의 가능성을 가지고 있다. 다행히도, 이런 우려는 Item28의 ''smart pointers''의 이용으로 편이성을 제시한다. 만약 LargeObject내부에서 smart pointer를 사용한다면 당신은 아마도 더이상 포인터를 mutable하게 선언할 필요가 없을것이다. 당신이 mutable을 필요로 하는 상황이, smart pointer클래스들의 적용으로 가기 때문에 위의 내용은 좀 임시적인것이다. 이런 문제에 관해 한번 생각해 봐라
Found 1 matching page out of 7544 total pages (5000 pages are searched)

You can also click here to search title.

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
Processing time 0.4818 sec