חידה ../images/Emo13.gif
נא לא לכתוב את התשובה בכותרת בקוד הבא יש זליגת זכרון. איפה היא, ואיך ניתן למנוע אותה?
נא לא לכתוב את התשובה בכותרת בקוד הבא יש זליגת זכרון. איפה היא, ואיך ניתן למנוע אותה?
#include <string> #include <iostream> using namespace std; class CBase { public: CBase(string &s) { m_s = s; } void PrintAndDelete() { Print(); delete this; } protected: virtual void Print() = 0; protected: string m_s; }; class CDerived : public CBase { public: CDerived(int nData, string &sAddedInformation) : CBase(string("Hi")), m_sAddedInformation(sAddedInformation), m_nData(nData) {} virtual void Print() { cout << m_s << ", " << m_nData << ", " << m_sAddedInformation << endl; } private: string m_sAddedInformation; int m_nData; }; int main() { CDerived *pDerived = NULL; for (int i = 0; i < 1000; i++) { pDerived = new CDerived(i, string("Hello!")); pDerived->PrintAndDelete(); } return 0; }