0
我正在實例化一個C++類作爲PHP擴展中的全局。它的工作原理,然而,valgrind正在報告一個明確的內存泄漏。如何在PHP擴展中實例化一個全局C++類?
在我php_myext.h,我宣佈,全球使用:
ZEND_BEGIN_MODULE_GLOBALS(myext)
MyClass *myClass;
ZEND_END_MODULE_GLOBALS(myext)
裏面我PHP_MINIT_FUNCTION我設置全局初始化函數和析構函數:
ZEND_INIT_MODULE_GLOBALS(myext, myext_init_globals, myext_destroy_globals);
然後我初始化函數和析構函數被實現爲如下:
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
static void myext_init_globals(zend_myext_globals *myext_globals)
{
myext_globals->myClass = new MyClass();
}
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
static void myext_destroy_globals(zend_myext_globals *myext_globals)
{
delete myext_globals->myClass;
}
我將MyClass :: test()方法暴露給PHP u唱了以下內容:
static PHP_METHOD(MyExt, test)
{
RETURN_STRING(MYEXT_G(myClass)->test().c_str(), 1);
}
一切正常,從我的PHP腳本罰款:
<?php echo MyExt::test(); ?>
然而,當我的valgrind我的測試腳本(test.php的),我得到一個泄漏:
LEAK SUMMARY:
definitely lost: 8 bytes in 1 blocks
indirectly lost: 42 bytes in 1 blocks
possibly lost: 0 bytes in 0 blocks
still reachable: 2,256 bytes in 18 blocks
suppressed: 0 bytes in 0 blocks
Reachable blocks (those to which a pointer was found) are not shown.
To see them, rerun with: --leak-check=full --show-reachable=yes
For counts of detected and suppressed errors, rerun with: -v
ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 282 from 9)
如果我使用「new」刪除實例化MyClass的部件,則不存在內存泄漏。這導致我相信C++類需要使用其他方法/宏在PHP擴展中實例化?
任何幫助,揭示這一點真的很感激。