Vin*_*nce 9 c++ pointers smart-pointers vector delete-operator
我需要创建一个类实例的指针,程序在编译时不知道我将创建多少指针.为了删除,我正在考虑将指针存储在一个向量中,然后逐个删除它们.智能指针的使用会更清晰吗?如果一个人不想使用智能指针,那么这种向量的使用会被认为是干净的吗?
最低代码:
#include <vector>
using namespace std;
class Foo {
public:
Foo();
};
Foo::Foo(){}
void createFooVector(int nb, std::vector<Foo*> &v){
for(int i=0;i<nb;i++){
Foo* f = new Foo();
v.push_back(f);
}
}
int main(int argc, char *argv[]){
std::vector<Foo*> v;
createFooVector(5,v);
while (!v.empty()){
Foo* f = v.back();
v.pop_back();
delete f;
}
}
Run Code Online (Sandbox Code Playgroud)
我建议使用boost::pointer_vector、 an std::vector<std::unique_ptr<Foo>>,或者推出您自己的Foo管理器类,该管理器类包含 avector<Foo*>并负责构造函数中的删除(您应该将其视为“专家”解决方案,并且只有在您完全同意的情况下才尝试使用它)了解异常安全)。您不想手动进行删除,这很容易导致错误。