#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <unordered_map>
#include <unordered_set>
#include <cmath>
using namespace std;
template <class T>
class binary_node {
public:
T data;
binary_node<T> *left;
binary_node<T> *right;
binary_node(const T& data)
:data(data), left(NULL), right(NULL) {
}
};
int main() {
binary_node<int>* node = new binary_node<int>(10);
node->left = new binary_node<int>(1);
node->right = new binary_node<int>(50);
binary_node<int>* ptr = node->left;
delete ptr;
ptr = NULL;
if (node->left == NULL) {
cout << "????";
}
else {
cout << node->left->data << endl;
}
return 0;
}
を期待しますが、 のデータがガベージnode->left == NULL
であるにもかかわらず、結果はまったく予想外です。node->left
Visual C++ 2010 を使用していますが、この動作を説明してくれる人はいますか?
編集
一方、次のようにノードをトラバースしてノードごとに削除すると、問題なく機能します。
~linkedlist() {
#if DEBUG
cout << "~linkedlist() called.\n";
#endif
while (head != NULL) {
#if DEBUG
cout << "delete node: " << head->data << '\n';
#endif
node<T>* temp = head;
head = head->next;
delete temp;
temp = NULL;
}
}