[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: lifetime of temporaries
From: |
sebastien333 |
Subject: |
Re: lifetime of temporaries |
Date: |
Thu, 05 Jul 2007 12:28:28 -0000 |
User-agent: |
G2/1.0 |
On Jul 4, 3:44 pm, Maxim Yegorushkin <maxim.yegorush...@gmail.com>
wrote:
> On 4 Jul, 16:55, sebastien...@gmail.com wrote:
>
>
>
> > I have the following program:
>
> > class A
> > {
> > string s;
>
> > public:
> > A(const string& a) : s(a) { cout << s << endl; }
>
> > };
>
> > class B : public A
> > {
> > public:
> > B(const string& b) : A(b) { }
>
> > };
>
> > class C : public B
> > {
> > public:
> > C() : B(string("ABC")) { }
>
> > };
>
> > int main(int argc, char *argv)
> > {
>
> > unsigned char i = 0;
>
> > C* c = new C;
>
> > delete c;}
>
> > /////////////////////////////////////////////////////////
>
> > If I put the delete c statement in comment, valgrind will report that
> > I'm leaking c AND the string temporary created when invoking B ctor.
> > why ?
>
> GNU C++ std::basic_string<> uses reference counting and copy-on-write.
> It means that the memory allocated by the temporary is shared by A::s.
> When destructor of A::s is not called it leaks memory, and that memory
> was allocated by the temporary.
Darn optimization ! ;-)
Thanks for the explanation, it all make sense now. Got any reference
on the web on that and other similar feature implemented in g++ ?