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 + -
显示快捷键?