temporary1.c

来自「linux下编程用 编译软件」· C语言 代码 · 共 42 行

C
42
字号
// { dg-do run  }extern "C" int printf (const char *, ...);int c, d;class Foo {public:   Foo() { printf("Foo() 0x%08lx\n", (__SIZE_TYPE__)this); ++c; }   Foo(Foo const &) { printf("Foo(Foo const &) 0x%08lx\n", (__SIZE_TYPE__)this); }   ~Foo() { printf("~Foo() 0x%08lx\n", (__SIZE_TYPE__)this); ++d; }};// Bar creates constructs a temporary Foo() as a defaultclass Bar {public:   Bar(Foo const & = Foo()) { printf("Bar(Foo const &) 0x%08lx\n", (__SIZE_TYPE__)this); }};void fakeRef(Bar *){}int main() {   // Create array of Bar. Will use default argument on constructor.   // The old compiler will loop constructing Bar. Each loop will   // construct a temporary Foo() but will not destruct the Foo().    // The Foo() temporary is destructed only once after the loop    // completes. This could lead to a memory leak if the constructor    // of Foo() allocates memory.   Bar bar[2];   fakeRef(bar);   printf("Done\n");   if (c == d && c == 2)     return 0;   return 1;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?