On 4 Jul, 16:55, [EMAIL PROTECTED] 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.


_______________________________________________
help-gplusplus mailing list
help-gplusplus@gnu.org
http://lists.gnu.org/mailman/listinfo/help-gplusplus

Reply via email to