我有以下代码:
#include <iostream>
using namespace std;
template <class T>
class Iterator;
template <class T>
class List;
template <class T>
class List {
public:
struct Node;
Node* first;
friend class Iterator<T>;
List() :
first(NULL) { }
Iterator<T> begin() {
cout << first->data << endl;
return Iterator<T>(*this, first); // <--- problematic call
}
void insert(const T& data) {
Node newNode(data, NULL);
first = &newNode;
}
};
template <class T>
struct List<T>::Node {
private:
T data;
Node* next;
friend class List<T>;
friend class Iterator<T>;
Node(const T& data, Node* next) :
data(data), next(next) { }
};
template <class T>
class Iterator {
private:
const List<T>* list;
typename List<T>::Node* node;
friend class List<T>;
public:
Iterator(const List<T>& list, typename List<T>::Node* node) {
cout << node->data << endl;
}
};
int main() {
List<int> list;
list.insert(1);
list.begin();
return 0;
}
首先,我将节点数据设置为&#34; 1&#34; (INT)。我只是将它传递给Iterator
构造函数,但它更改了node->data
的值。
我在通话前后打印node->data
:
1
2293232
我想2293232
是某个地址,但我无法找到发生这种情况的原因。
答案 0 :(得分:5)
写作时
lucky number
然后:
您在堆栈上创建对象
将一些(更多)持久性指针指向其地址
在范围超出范围时对其进行破坏
所以你留下了垃圾。