删除vector中的指针出错
Error deleting pointers in a vector
这段代码遇到了一个问题:首先,我创建一个这样的类:
template <typename T1, typename T2> class MyClass
{
private:
std::vector<T2> m_values;
static const bool HAS_POINTER = std::is_pointer<T2>::value;
};
根据需要,T2既可以是类型,也可以是指针。我的问题是,当我试图释放指针:
template<typename T1, typename T2> void MyClass<T1, T2>::Clear()
{
if (HAS_POINTER)
{
for (int i = 0; i < m_values.size(); ++i)
delete m_values[i];
}
}
这里编译器报错显示错误C2541:不能删除不是指针的对象我知道编译器是正确的,但问题是T2,在某些情况下,是一个指针。我该如何处理呢?
你可以为指针部分专门化模板。下面是一个非常简单的例子:
#include <vector>
#include <iostream>
template <typename T1, typename T2> class MyClass
{
public:
std::vector<T2> m_values;
void Clear()
{
std::cout << "no pointersn";
}
};
template <typename T1, typename T2> class MyClass<T1, T2*>
{
public:
std::vector<T2*> m_values;
void Clear()
{
std::cout << "pointersn";
for (int i = 0; i < m_values.size(); ++i)
delete m_values[i];
}
};
int main()
{
MyClass<int, int> example;
MyClass<int, int*> example2;
example.Clear();
example2.Clear();
}
相关文章:
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 将链表转换为指针数组时出错
- 尝试将指针与结构一起使用时出错
- 将类指针类型转换为键时出错
- 如果我在指针中使用 ++ 操作数,我的值就会出错
- 在 Clang 中使用指向成员的指针时出错
- 编译包含指向模板函数的指针的初始值设定项列表时,gcc 出错,但 clang 不出错
- 通过在迭代指针键映射上出错来捕获非确定性
- 调用指向成员函数的指针时出错
- 通过具有矢量基址的指针读取矢量元素时出错
- 尝试返回指向 Visual Studio 中的动态数组的指针时出错C++
- 将空间分配给整数指针时出错
- GNU 链接器:如果头文件中的指针被声明为 NULL 和/或 extern,则出错
- 尝试将结构指针传递给类时出错
- 我设计了一个类并创建了基指针,但是当我尝试通过基指针访问派生函数时,它会出错
- 非标准语法;使用 '&' 创建指向成员的指针错误,将成员函数分配给向量时出错
- 指向 2D 数组的指针出错
- 删除vector中的指针出错
- 在c++函数中使用指针出错
- 指向数组参数的双指针出错