Documentazione di PostgreSQL 9.0 > Programmazione del server > Estendere SQL > Usare C++ per l'estendibilità
PrecedenteInterfacing Extensions To IndexesTriggerSuccessivo

35.15. Usare C++ per l'estendibilità

È possibile usare un compilatore in modalità C++ per compilare estensioni PostgreSQL™ seguendo queste linee guida:

  • Tutte le funzioni a cui accede il backend devono fornire un'interfaccia C al backend; queste funzioni C possono quindi chiamare funzioni C++. Per esempio, il collegamento extern C è richiesto per funzioni a cui accede il backend. Questo è necessario per qualsiasi funzione passata come puntatore tra il backend e il codice C++.

  • Liberare la memoria usando l'appropriato metodo di deallocazione. Per esempio, la maggior parte della memoria del back è allocata usando palloc(), quindi usare pfree() per liberarla, per es. usando la delete() del C++ in quei casi risulterà in un fallimento.

  • Prevenire che le eccezioni si propaghino all'interno del codice C (usare un blocco catch-all al livello superiore di tutte le funzioni extern C). Questo è necessario anche se il codice C++ non lancia nessuna eccezione perchè eventi come out-of-memory continuano a lanciare eccezioni. Qualsiasi eccezione deve essere intercettata e gli errori appropriati devono essere ritornati all'interfaccia C. Se possibile, compilare il C++ con -fno-exceptions per eliminare interamente le eccezioni; in questi casi, si devono controllare i fallimenti nel proprio codice C++, per es. controllare se le new() restituiscano NULL.

  • Se si chiamano funzioni di backend dal codice C++, assicurarsi che lo stack delle chiamate C++ contenga solo semplici strutture dati (POD). Questo è necessario dato che errori di backend generano un longjump() lontano che non srotola correttamente uno stack di chiamata C++ con oggetti non-POD.

Riassumendo, è meglio mettere il codice C++ dietro un muro di funzioni extern C che si interfaccia col backend, e evitare la perdita di eccezioni, memoria e stack di chiamate.

Documentazione di PostgreSQL 9.0 > Programmazione del server > Estendere SQL > Usare C++ per l'estendibilità
PrecedenteInterfacing Extensions To IndexesTriggerSuccessivo