[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: lifetime of temporaries
From: |
Maxim Yegorushkin |
Subject: |
Re: lifetime of temporaries |
Date: |
Wed, 04 Jul 2007 12:44:42 -0700 |
User-agent: |
G2/1.0 |
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.