子类的成员变量动态分配的问题

来源:百度知道 编辑:UC知道 时间:2024/05/17 18:58:13
父类和子类中有相同的动态分配的成员变量,二者占用内存不一样
子类是否需要先delete,再进行动态分配?

代码如下

class CTest
{
//构造
CTest()
{
m_num = 0;
m_pArray = NULL;
m_t = 0;
}

//构造
CTest(int t)
{
m_num = 10;
m_pArray = new int[m_num];
for(int i = 0; i < m_num; i++)
{
m_pArray[i] = i;
}
m_t = t;
}

//析构
~CTest()
{
if(m_pArray && m_num > 0)
{
delete []m_pArray;
m_pArray = NULL;
}
}

int* m_pArray;
int m_num;
int m_t;
}

class A : public CTest
{
//构造
A() : CTest()
{
}

//构造
A(int t) : CTest(t)
{
//此处一定要这么处理吗,有否更好的办法
if(m_pArray && m_num > 0)
{
delete []m_pArray;
m_pArray = NULL;
}

m_num = 20;
m_pArray = new int[m_num];
for(int i = 0; i

难道你打算对每一种情况都问一遍要不要delete么。。 要不要delete的原则很简单, 如果一块内存就要没东西指向它了或者它不再用到了就要delete它。 在这里 m_pArray = new int[m_num]之前经过基类的构造的时候它已经分配到了一块内存,而这一句之后,之前分配的内存就没指针指过去了,所以必须在这一句之前delete它

把A(int t)后面的:CTest(t)去掉的话,应该就只会调用CTest的默认构造函数了吧,那样的话,m_pArray就是NULL了,就不用delete了