删除vector中的指针出错

Error deleting pointers in a vector

本文关键字:指针 出错 vector 删除      更新时间:2023-10-16

这段代码遇到了一个问题:首先,我创建一个这样的类:

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();
}