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