我使用具有union
类型的bison解析器生成器来生成返回类型。
union {
std::vector<std::string*> *vecStrPtr;
// double num; ...
};
如何从向量指针中删除指针;
auto v = new std::vector<std::string*>();
//....
v->push_back(new std::string("text"));
//...
delete v[0];
错误:输入'class std::vector<std::__cxx11::basic_string<char>*>'
参数&#39;删除&#39;,预期指针delete v[0];
答案 0 :(得分:1)
当你只做v[0]
时,你得到了向量,因为v
是一个指针然后你需要从那个向量中获取值。您可以通过添加另一个阵列访问来实现。所以工作代码看起来像delete v[0][0];
。但是,当您从一个维度数组(向量)访问值时,两个数组访问可能会造成混淆。
从指针v
获取向量的另一种方法是取消引用它。代码看起来像(*v)[0]
。访问价值更加清晰。使用(*v)
,您将获得向量,然后数组访问将从向量访问值。
从矢量使用方法erase
中删除值。有关该方法的更多信息,请查看此link。代码示例如下:
auto v = new std::vector<std::string*>();
//....
v->push_back(new std::string("text"));
//...
delete (*v)[0];
v->erase(v->begin());
更好的是编写没有关键字new的代码。使用该规则,您将获得更少的内存泄漏。它使您的开发更容易。但在某些情况下,您无法使用它。您的规则修改的代码示例如下所示:
std::vector<std::string> v;
v.push_back(std::string("text"));
//here is how to get pointers from it
std::string* ptrToElement = &(v[0]);
std::vector<std::string>* ptrToVector = &v;
答案 1 :(得分:0)
免费获得一件物品的正确方法是:
delete (*v)[index];
v->erase(b->begin()+index);
但是,您应该确保您真的想在免费商店中分配一个向量。看起来通常是错的。
P.S。正如@Dahn所说,这两条指令应该是原子的。