我最近在使用NDK編譯Android控制檯程序時遇到了一個奇怪的問題。什麼時候在NDK中調用全局變量的C++析構函數?
類聲明如下:
class ClassP
{
public:
~ClassP()
int number;
}
ClassP::~ClassP()
{
printf("number=%d", number);
}
主要功能是這樣的:
// global variable
ClassP p_instance;
int main()
{
printf("test");
}
當執行程序時,它會輸出
test
Segmentation fault
經過一番基本的調試,我發現當調用ClassP的析構函數時,它的成員變量的地址le編號是0.我認爲這是因爲p_instance在析構函數被調用之前以某種方式被釋放。但這種行爲並不是我所期望的。當進程退出並且系統試圖釋放所有對象時,是不是調用全局變量的析構函數?
這是C++,使用' cout',而不是'printf',加上'return 0; '在'main'中,初始化'default'構造函數中的''''然後重試。我並不熟悉NDK和android,但它仍然是C++ –
@KirilKirov printf沒有任何問題。 cout的問題在於它依賴於可能在對象之前被解構的對象。 – Pubby
您是否嘗試過使用GCC的'constructor'和'destructor'函數屬性?如果你不能讓你的班級工作,那麼也許那些會。 – Pubby