【发布时间】:2012-12-26 00:37:18
【问题描述】:
我的析构函数有一些问题,在下一个代码中:
#include <stdlib.h>
#include <cstdio>
class Foo2
{
public:
Foo2() { printf("foo2 const\n"); }
~Foo2()
{
printf("foo2 dest\n"); // <--- wasn't called for bionic libc
}
};
static Foo2& GetFoo2()
{
static Foo2 foo2;
printf ("return foo2\n");
return foo2;
}
class Foo1
{
public:
Foo1() { printf("foo1 const\n"); }
~Foo1()
{
printf("foo1 dest\n");
GetFoo2();
}
};
int main( int argc, const char* argv[] )
{
printf("main 1 \n");
static Foo1 anotherFoo;
printf("main 2 \n");
}
为什么没有为bionic 调用foo2 的析构函数,而是为glibc 调用析构函数?
编辑
仿生的输出:
main 1
foo1 const
main 2
foo1 dest
foo2 const
return foo2
调试信息:
(gdb) break 22
Breakpoint 1 at 0x8048858: file test.C, line 22.
(gdb) info breakpoints
Num Type Disp Enb Address What
1 breakpoint keep y 0x08048858 in Foo2::~Foo2() at test.C:22
(gdb) cont
[ exited with code 0]
【问题讨论】:
-
什么是仿生和glibc?
-
@LuchianGrigore 两种流行的标准 C 和 C++ 库实现:glibc 是 GNU 的,Bionic 是用于 Android 的。
-
我认为这是 Bionic 中的一个错误
-
好像是仿生的一个bug……
标签: c++ oop static g++ destructor