c ++类构造函数中的内存泄漏

use*_*252 5 c++ memory memory-leaks memory-management

我有以下课程

class CSample
{
   char* m_pChar;
   double* m_pDouble;

 CSample():m_pChar(new char[1000]), m_pDouble(new Double[1000000])
{
}
~CSample()
{
   if(m_pChar != NULL) delete [] m_pchar;
   if(m_pDouble != NULL) delete [] m_pDouble;
}
};
Run Code Online (Sandbox Code Playgroud)

在我的main()函数中,我正在尝试创建CSample的对象

int main()
{
    try
  {
    CSample objSample;
  }

catch(std::bad_alloc)
{
  cout<<"Exception is caught !!! Failed to create object";
}

}
Run Code Online (Sandbox Code Playgroud)

假设在构造函数的初始化列表中为m_pDouble分配内存时,由于可用内存不足,它会抛出异常.但是对于m_pChar它已经被分配了.由于没有创建对象本身,因此不会调用析构函数.然后m_pChar会有内存泄漏.

你如何避免这种内存泄漏?

jxh*_*jxh 5

您可以使用vector替代方法轻松避免此类问题.

class CSample
{
   std::vector<char> m_pChar;
   std::vector<double> m_pDouble;

   CSample():m_pChar(1000), m_pDouble(1000000)
   {
   }
};
Run Code Online (Sandbox Code Playgroud)

一般来说,您的目标应该是编写不需要析构函数的类.这使得他们琐碎地遵守三法则.

  • 有效地使其服从[零度规则](http://flamingdangerzone.com/cxx11/2012/08/15/rule-of-zero.html). (2认同)