gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:14:56 24 4
gpt4 key购买 nike

我有以下类(class)

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;
}
};

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

int main()
{
try
{
CSample objSample;
}

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

}

假设在构造函数的初始化列表中为 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)
{
}
};

一般来说,您的目标应该是编写不需要析构函数的类。这使他们平凡地遵守 Rule of Three .

关于c++ - C++类构造函数中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24879746/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com