ho alcuni problemi con distruttore, nel codice seguente:distruttore di un oggetto statico costruito all'interno il distruttore di un altro oggetto statico
#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");
}
Perché distruttore per foo2 non è stato chiamato per bionic
ed è stato per glibc
?
EDIT
Uscita per bionico:
main 1
foo1 const
main 2
foo1 dest
foo2 const
return foo2
Debug Info:
(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]
dovrebbe mostrare un'uscita –
cosa sono bionic e glibc? –
@LuchianGrigore Due diffuse implementazioni di libreria standard C e C++: glibc è quello GNU, Bionic è per Android. –