最近,我在使用 NDK 编译 Android 控制台程序时遇到了一个奇怪的问题。
该类声明如下:
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的析构函数被调用时,其成员变量number的地址为0。我认为这是因为在析构函数被调用之前,p_instance被释放了。但这种行为并不是我预期的。难道全局变量的析构函数不是在进程退出并且系统尝试释放所有对象时被调用吗?
cout
而不是printf
,在main
函数中添加return 0;
,在default constructor
中初始化number
,然后再试一次。我对NDK和Android一点也不熟悉,但它仍然是C++。 - Kiril Kirovconstructor
和destructor
函数属性吗?如果你无法让你的类正常工作,也许这些属性可以帮到你。 - Pubby