【发布时间】:2012-07-22 10:34:30
【问题描述】:
int main(){
//Node is some template class
Node<int>* head = new Node<int>[5];
for(int ii = 0; ii < 5; ii++)
{
head[ii].set_Data(ii);
head[ii].set_Link(head + (ii + 1));
if(ii == 4)
{
head[ii].set_Link(NULL);
}
}
delete [] head;
}
template<typename T>
void Node<T>::set_Link(Node* Node_Address)
{
Link = Node_Address;
}
template<typename T>
Node<T>::~Node()
{
delete Link;
cout << "Destructor" << endl;
}
我现在正在学习链表。我不明白为什么我的析构函数被调用 15 次而 cout 语句被打印 15 次。 如果我摆脱声明
head[ii].set_Link(head + (ii + 1));
析构函数只被调用了 5 次,这是有道理的,因为创建了 5 个类。 为什么在我使用成员函数 set_Link() 时调用析构函数,而我只传递一个指针,而不是一个类。甚至没有调用复制构造函数。感谢您的帮助!
【问题讨论】:
-
"为什么我使用成员函数set_Link()时调用了析构函数。" - 它没有被调用。你已经在做一些跟踪消息,添加更多。我不知道你怎么没注意到这一点。
-
请发布一个完整但最小的程序来演示此行为。否则,我们只能猜测,这对您没有帮助。
-
请在您描述的任何一种情况下发布确切的输出。
set_Data的代码是什么?
标签: c++ class memory pointers destructor