mrs*_*ter 4 c++ stack destructor class linked-list
我正在尝试实现堆栈和队列.我还获得了一个代码来测试堆栈和队列(以查看它们各自的功能是否正常工作).
我已经实现了堆栈和quete的函数,但是当我们尝试编译它们时,我得到错误:
在析构函数`Stack :: ~Stack()'期望的类名之前'(''
两个中的标记.
以下是通用的Stack类:
template <class T>
class Stack
{
List<T> list;
public:
Stack();
Stack(const Stack<T>& otherStack);
~Stack();
}
Run Code Online (Sandbox Code Playgroud)
List类:
template <class T>
class List
{
ListItem<T> *head;
public:
List();
List(const List<T>& otherList);
~List();
}
Run Code Online (Sandbox Code Playgroud)
现在List类的析构函数工作得很好.所以记住这一点,我对析构函数的实现是:
template <class T>
Stack<T>::~Stack()
{
list.~List();
}
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?
你应该(几乎)从不明确地调用析构函数.当你Stack的生命结束时,它会自动调用其成员的析构函数.你不需要做任何事情.list将被自动销毁.
如果你有一个指针,p作为一个成员动态分配的对象,那么你需要在析构函数中做一些清理工作delete p;.但在这里,你没有.list将被自动销毁.
您的list成员是自动变量.它的生命周期(它的构造函数和析构函数被调用的时间)由语言管理.一旦包含的对象超出范围,List就会调用析构函数.
也就是说,有正当理由明确地调用析构函数(你没有一个并且你很少会这样做)并且实际上你需要正确地指定类型.
在你的情况下,将是
list.~List<T>();
Run Code Online (Sandbox Code Playgroud)
List 本身是一个模板,而不是一个类型.