欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

35.15.使用 C++ 进行扩展 - [ PostgreSQL 手册 ] - 本地在线手册 - php中文网

最编程 2024-04-09 21:03:12
...

35.15. 用C++扩展

可以用一个C++模式的编译器来编译PostgreSQL的扩展性,如下:

  • 后台连接的所有函数必须为后台提供一个C接口; 这样,C函数可以调用C++函数。例如,后台连接函数请求一个extern C连接。 对此,那些在后台和C++代码之间传递为指针的函数也是需要的。

  • 使用合适的重分配方法来释放内存。例如, 大多数的后台内存是用palloc()分配的,因此使用pfree()来释放,在这种情况下, 使用C++的delete()会失败。

  • 避免传递到C代码的异常(在extern C函数的*别使用一个抓取所有块)。 这是必须的,即使C++代码不会抛出一场,因为类似于内存溢出仍会抛出异常。 任何的异常都必须被抓取,并且向C接口返回相关的错误。 如果可能的话,带有-fno-exceptions的C++编译器排除所有的异常; 在这种情况下,必须检查C++代码中的所有错误,检查new()返回的空。

  • 如果从C++代码调用后台函数,要确保C++调用堆栈只包含普通的旧数据结构(POD)。 这是必须的,因为后台错误产生一个模糊的longjmp()(它不能恰当的用POD对象 来展开一个C++请求)。

总之,最好在与后台进程接口的extern C的后面放置C++代码, 并且避免异常,内存和调用堆栈泄漏。