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++代码, 并且避免异常,内存和调用堆栈泄漏。
上一篇: 克里塔像素艺术教程
推荐阅读