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会有内存泄漏.
你如何避免这种内存泄漏?
您可以使用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)
一般来说,您的目标应该是编写不需要析构函数的类.这使得他们琐碎地遵守三法则.