我有一个模板化类 myFoo,它存储类型 T 的“内容”,它可以是基本类型或指向复杂类型的指针。当 myFoo 被删除时,我想释放与它恰好存储的所有内容相关的所有内存。这意味着我需要在存储的每个指针上调用 delete,但我最终也可能会在原语上调用 delete。这样安全吗??
我在下面包含了 myFoo 的草图,以更好地突出显示正在发生的事情。我不确定析构函数的行为是否定义明确。
template<class T>
class myFoo
{
public:
myFoo(int size)
{
size_ = size;
T* foo = new T[size_];
}
void addFoo(T tmp, int index)
{
foo[index] = tmp;
}
virtual ~myFoo()
{
for(int i=0; i < size_; i++)
{
delete foo[i];
}
delete [] foo;
}
private:
int size_;
T* foo;
}
最佳答案
唯一可以调用 delete
的是指针类型。例如,在 int
上调用 delete
是错误的。如果你安排你的模板,使你的代码试图做一些错误的事情,编译器会让你知道并拒绝编译你的代码。
所以不,您不必担心“意外”删除非指针。
关于c++ - 我可以在基元上调用 delete 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11643395/