【发布时间】:2014-05-15 21:10:03
【问题描述】:
我在编写模板类 win C++ 时遇到了一个小问题。
问题很简单:我不知道是否对参数化类型执行delete,因为它可以是,也不能是指针。
我看过这个:Destructor in template class c : How to delete field which may be pointer or not pointer?
我已经实现了第一个解决方案,但这需要我专攻整个班级,所以这意味着我必须有 2 个班级:
template<class T>
class Node {
private:
T _content;
public:
Node(const T c);
~Node();
};
和
template<class T>
class Node<T*> {
private:
T _content;
public:
Node(const T c);
~Node();
};
我只想要第二个版本并专门只析构函数如下:
template<class T>
class Node<T*> {
private:
T _content;
public:
Node(const T c);
~Node();
};
template <class T>
Node<T>::~Node() {
while(!_adjacent.isEmpty()) {
disconnectFrom(_adjacent.first());
}
}
template <class T>
Node<T*>::~Node() {
while(!_adjacent.isEmpty()) {
disconnectFrom(_adjacent.first());
}
delete _content;
}
然后我收到以下错误:
Node.hpp:43:17: error: invalid use of incomplete type ‘class Node<T*>’
Node.hpp:8:7: error: declaration of ‘class Node<T*>’
有没有办法只专门化构造函数以避免有 2 个类(我的 Node 类比我在这里展示的要大得多)?
谢谢!
【问题讨论】:
-
你能更清楚地解释一下你想专攻什么方法吗?不,你不能部分特化函数模板和类模板的方法(构造函数和析构函数都是方法,所以......)。
-
为什么不使用 unique_pointer 而不是原始指针?没有开销,它会随心所欲。