help-gplusplus
[Top][All Lists]
Advanced

[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++ ?



reply via email to

[Prev in Thread] Current Thread [Next in Thread]