이 문서는 지원되지 않는 버전의 젠 토토 용입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다현재버전 또는 위에 나열된 다른 지원되는 버전 중 하나입니다.

35.15. 확장 성을 위해 C ++ 사용

C ++ 모드에서 컴파일러를 사용하여 빌드 할 수 있습니다PostgreSQL확장에 의한 이 지침에 따라 :

  • 백엔드에서 액세스하는 모든 기능은 C를 제공해야합니다. 백엔드 인터페이스; 이 C 기능은 C ++ 호출 할 수 있습니다 기능. 예를 들어,extern c백엔드 액세스 함수에는 연결이 필요합니다. 이것은 포인터로 전달되는 모든 기능에도 필요합니다. 백엔드와 C ++ 코드 사이.

  • 적절한 거래 방법을 사용한 무료 메모리. 을 위한 예를 들어, 대부분의 백엔드 메모리는를 사용하여 할당됩니다.palloc ()이니pfree ()그것을 자유롭게하려면, 즉 C ++ 사용delete ()그러한 경우에 실패하다.

  • C 코드로 전파되는 예외를 방지합니다 (사용 All의 최상위 수준에서의 모든 블록extern c함수). 이것은하더라도 필요합니다 C ++ 코드는 이벤트이므로 예외를 던지지 않습니다. 메모리가 아닌 것처럼 여전히 예외를 던집니다. 모든 예외 잡히고 적절한 오류가 C로 전달되어야합니다. 인터페이스. 가능하면 C ++를로 컴파일하십시오.-fno-exceptions예외를 제거합니다 전적으로; 그러한 경우, 당신은 당신의 실패를 확인해야합니다. C ++ 코드 (예 : null을 확인하여new ().

  • C ++ 코드에서 백엔드 기능을 호출하는 경우 C ++ 통화 스택에는 일반 기존 데이터 구조 만 포함됩니다. (포드). 이것은 필요합니다 백엔드 오류가 먼 것을 생성하기 때문에longjmp ()제대로 풀리지 않습니다 비 POD 객체와 함께 C ++ 호출 스택.

요약하면 C ++ 코드를 벽 뒤에 배치하는 것이 가장 좋습니다extern c백엔드, 예외, 메모리를 피하고 스택 누출을 통화하십시오.