我要修改一个数组的长度,就用T *NewElement = new T[MaxSize];
申请了一个新空间,然后把原来数组element的数值赋进去。
最后delete element.再element = NewElement.
那么在析构的时候直接delete []element会有问题吗?
奇怪的是我在一个程序里面这样写没问题。
但是在另外一个就有问题了,除非屏蔽掉析构。
否则运行错误。
似乎因为最后一次调用的时候已经delete了element,
所以再次析构就有错误。但是element不是已经指向NewElement了吗?
申请了一个新空间,然后把原来数组element的数值赋进去。
最后delete element.再element = NewElement.
那么在析构的时候直接delete []element会有问题吗?
奇怪的是我在一个程序里面这样写没问题。
但是在另外一个就有问题了,除非屏蔽掉析构。
否则运行错误。
似乎因为最后一次调用的时候已经delete了element,
所以再次析构就有错误。但是element不是已经指向NewElement了吗?
element =NULL;element = new T[Size];T* NewLement=new T[Size];....
delete []element;
element=NewElement;
..在析构中
{
if(element)
{
delete []element;
element=NULL;
}
}
应该没问题呀。
还有,在VC里。如果T是C++基本的类型,delete 和delete []是一致的。
如T是类,删除数组必须delete []
~LinearList() {delete [] element;}// destructor
函数体:(抱歉,辛苦大家的眼睛了……)
template<class T>
LinearList<T> LinearList<T>::Half()
{
if (length == 0) // list is empty
{ return *this; }
else if (length%2 == 0) //length is even
{
MaxSize = length/2;
T *NewElement = new T[MaxSize];
for (int i = 0; i < length; i += 2)
{
NewElement[i/2] = element[i];
}
delete [] element;
element = NewElement;
length = length/2;
}
else // length is odd
{
MaxSize = length/2 + 1;
T *NewElement = new T[MaxSize];
for (int i = 0; i < length; i += 2)
{
NewElement[i/2] = element[i];
}
NewElement[i-1] = element[i-1];
delete [] element;
element = NewElement;
length = length/2 + 1;
} return *this;
}
修改为LinearList<T>& LinearList<T>::Half()
就没问题了。看来return *this是要返回引用的。
不管怎么样,谢谢大家!