2017-04-26 10 views
1

프로젝트에서 Protobuf 2를 사용하고 있습니다. 런타임에 메시지를 만들려면 DynamicMessageFactory을 사용하고 싶습니다. DynamicMessageFactory에는 Descriptor*이 필요합니다. 생성 된 클래스의 변경 가능 메시지 Descriptor*을 전달 중입니다. 문서에 의하면 은 DynamicMessageFactory보다 오래 있어야하며 공장에서 생성 된 메시지보다 오래 지속되어야한다고 나와 있습니다.생성 된 protobuf 메시지의 디스크립터 수명은 얼마입니까?

생성 된 클래스의 설명자 수명은 어떻게됩니까? 클래스의 정적 멤버입니까?

답변

2

생성 된 코드/컴파일 된 메시지 클래스에 대한 설명자는 영원히 산다. 따라서 잘해야한다.

그러나 유형을 준수하는 경우 을 사용할 이유가 없습니다. 동적 메시지는 생성 된 코드보다 훨씬 느리고 생성 된 코드는 생성 된 인터페이스 외에도 전체 동적 인터페이스를 지원합니다. 대신 the generated factory을 사용하여 생성 된 메시지의 인스턴스를 가져올 수 있습니다. 또는 더 깨끗한 전략은 MyType::default_instance()을 호출하여 메시지의 프로토 타입을 가져온 다음 설명자를 전달하지 않고 해당 포인터를 전달하는 것입니다.

생성 된 일부 유형과 일부 동적 유형을 혼합해야하는 경우 DynamicMessageFactory::SetDelegateToGeneratedFactory()을 사용해보십시오.