删除指向指针的向量指针时出错



你觉得这个函数怎么样?

void deleteVector(vector<Persistent*> *v) {
    if (v) {
        for (int i = 0; i < v->size(); i++)
            delete v[i];
        delete v; 
    }
}

我一直得到以下错误:

  • test.cpp:在成员函数'void Koala::ListAddressAction::deleteVector(std::vector>*)'中:

  • test.cpp:160:错误:类型'class std::vector>'参数给定给'delete',预期的指针test.cpp:在成员函数'virtual void Koala::ListAddressAction::execute()':

  • test.cpp:176:错误:没有匹配的函数调用'Koala::ListAddressAction::deleteVector(std::vector>*&)'

  • test.cpp:157:注:候选人为:void Koala::ListAddressAction::deleteVector(std::vector>*)

我想这是因为我从[]操作符得到了一个引用…但我不知道如何解决它。

谢谢…

v是一个指针,因此在对其使用下标操作符之前需要对其解引用:

for (int i = 0; i < v->size(); i++)
    delete (*v)[i];
//         ^^^^

或者,您可以使用显式操作符语法:

delete v->operator[](i);

v是您传入的指针。当你访问v[i]时,你访问的是ivector。实际上,你只有一个向量,你想要delete它的元素。要做到这一点,首先取消对指针的引用:

delete (*v)[i];

最新更新