내가 다음 코드에서 소멸자 몇 가지 문제를 가지고의 소멸자 내에서 건설 :소멸자는 다른 정적 객체
에서는 foo2에 대한 소멸자bionic
을 요구하고
glibc
위해이었다되지 않은 이유를
#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");
}
? 생체 공학에 대한
편집
출력 :
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 용입니다. –