我正在编写一个模板类,它在内部管理给定类型的数组.像这样:
template<typename T>
class Example {
// ...
private:
T* objects; // allocated in c'tor (array), deleted in d'tor
// ...
};
Run Code Online (Sandbox Code Playgroud)
我想知道objects
当我删除它时,C++是否会调用每个对象的析构函数delete[] objects;
.
我需要知道这一点,因为我的类中的对象始终不包含合理的值,因此不应该在不执行时调用析构函数.
此外,我想知道,如果我宣布一个固定大小的数组像析构函数将被称为T objects[100]
作为的一部分Example<T>
.
在编写模板类win C++时,我遇到了一个小问题.问题很简单:我不知道是否要delete
在paremetrized类型上做一个,因为它可能,或者它不能成为一个指针.
我已经看到了这样:模板类c中的析构函数:如何删除可能是指针或非指针的字段?
我已经实现了第一个解决方案,但这需要我专门化整个类,所以这意味着我必须有两个类:
template<class T>
class Node {
private:
T _content;
public:
Node(const T c);
~Node();
};
Run Code Online (Sandbox Code Playgroud)
和
template<class T>
class Node<T*> {
private:
T _content;
public:
Node(const T c);
~Node();
};
Run Code Online (Sandbox Code Playgroud)
我想只有第二个版本,并且只对析构函数进行如下操作:
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;
}
Run Code Online (Sandbox Code Playgroud)
但后来我收到以下错误:
Node.hpp:43:17: error: invalid use …
Run Code Online (Sandbox Code Playgroud)