template<typename NODETYPE>
/*List<NODETYPE>&*/
void concatenate(List<NODETYPE> &list1, List<NODETYPE> &list2)
{
NODETYPE value;
while (!list2.isEmpty())
{
if (list2.removeFromFront(value))
list1.insertAtBack(value);
}
//return list1;
}
代码如上,函数作用是把链表2内容附到链表1后面
当我以非引用形式返回main函数里的对象list1时,当concatenate函数调用结束之后list1会被析构。可是 list1在main函数里的话,不是应该等到程序执行结束才会析构么。
局部变量放在堆栈上的话,在函数外析构。
模拟了一下问题,并没有出现所说的现象。代码如下:
list returnStr(list &s2)
{
return s2;
}
int main(int argc, char *argv[])
{
const string s = "24";
list l = {"22","234"};
list s2 = returnStr(l);
getchar();
return 0;
}
解释一下:传递参数传递的是引用类型,而返回参数是对list的再次拷贝。
对于传进来的引用来说,它的作用域范围,是定义它的地方。只有超过
作用域范围,且没有对其引用时,才会释放内存。
template<typename NODETYPE>
List<NODETYPE> concatenate(List<NODETYPE> &list1, List<NODETYPE> &list2)
{
NODETYPE value;
while (!list2.isEmpty())
{
if (list2.removeFromFront(value))
list1.insertAtBack(value);
}
return list1;
}
int main()
{
List<int> integerList1;
testList(integerList1, "integer");
List<int> integerList2;
testList(integerList2, "integer");
concatenate(integerList1, integerList2);
integerList1.print();
system("pause");
}