Will the below code cause memory leak in c++

前端 未结 7 1914
醉话见心
醉话见心 2020-12-05 08:13
class someclass {};

class base
{
    int a;
    int *pint;
    someclass objsomeclass;
    someclass* psomeclass;
public:
    base()
    {
        objsomeclass = so         


        
7条回答
  •  青春惊慌失措
    2020-12-05 08:34

    Yes, that code will leak memory. Blocks of memory allocated using "new" are not freed when an exception is raised. This is part of the motivation behind RAII.

    To avoid the memory leak, try something like this:

    psomeclass = NULL;
    pint = NULL;
    /* So on for any pointers you allocate */
    
    try {
        objsomeclass = someclass();
        psomeclass = new someclass();
        pint = new int(); 
        throw "constructor failed";
        a = 43;
     }
     catch (...)
     {
         delete psomeclass;
         delete pint;
         throw;
     }
    

提交回复
热议问题