Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/g++.old-deja/g++.other/temporary1.C @ 158:494b0b89df80 default tip
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 25 May 2020 18:13:55 +0900 |
parents | 04ced10e8804 |
children |
line wrap: on
line source
// { 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 default class 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; }