【发布时间】:2016-02-15 21:58:55
【问题描述】:
考虑这两个类(List<Type> 和 List<Type>::iterator)
// List<Type>
template<typename Type>
class List {
public:
class iterator;
iterator& iter();
private:
Type *elems; // Array
};
// List<type>::iterator
template<typename Type>
class List<Type>::iterator {
public:
Type *current;
Type operator* ();
private:
iterator (Type *current) : current(current) {}
};
template<typename Type>
typename List<Type>::iterator& List<Type>::iter () {
return (iterator(this->elems));
}
// Program
int main () {
List<int> *list = new List<int>();
List<int>::iterator iter = list->iter(); // When does iter get destroyed?
delete list;
}
我读到了这个带括号 return (...); 的返回,可以说是引用返回。我不确定,但我认为iter 是在堆栈上创建的(因为没有new)。所以我的问题是:iter 何时超出范围?在iter() 之后,main() 之后或其他地方?我必须手动delete 吗?
【问题讨论】:
-
你为什么在这里使用指针
List<int> *list?你是用new分配的吗? -
+πάντα-ῥεῖ 是的,我将
List<int>与new一起分配,并且我还在原始代码中的某处将其删除。我实际上缩短了这里的代码。