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백엔드, 예외, 메모리를 피하고 스택 누출을 통화하십시오.