删除指针向量
Deleting vector of pointers
我需要创建类实例的指针,而程序在编译时并不知道我将创建多少个指针。对于删除,我考虑将指针存储在一个向量中,然后逐个删除它们。使用智能指针会是一种更干净的方式吗?如果不想使用智能指针,那么vector的这种用法会被认为是干净的吗?
最低代码:#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;
}
}
我建议使用boost::pointer_vector,一个std::vector<std::unique_ptr<Foo>>
,或者推出你自己的Foo
管理器类,它包含一个vector<Foo*>
,并在构造函数中负责删除(你应该把这看作是"专家"解决方案,只有在你完全理解异常安全的情况下才尝试它)。您不希望手动删除,因为这很容易导致错误。
您的代码很好。然而,使用智能指针应该是首选(更少的代码编写和更少的内存错误的机会)。
使用智能指针会是一个更简洁的方法吗?
是的。
如果不想使用智能指针,会使用载体被认为是干净的吗?
我不知道,为什么有人不想在c++中使用智能指针,如果它不是家庭作业…但是,我认为,在这种情况下,最好使用boost::pointer_containers
。
如果您不使用从Foo
派生的类,并且复制Foo
相对便宜,则只需使用vector<Foo>
。
相关文章:
- 函数向量_指针有不同的原型,我可以构建一个吗
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 使用向量类的c++指针
- 如何使用C++初始化向量;脚本化值不是数组、指针或矢量错误
- 如何更改唯一指针向量的可见性
- C++ 独特指针练习的向量
- C 中的向量指针的清晰图
- 当向量位于内部类中时,如何删除指向对象的向量指针
- std::向量指针
- 指向结构体的向量指针错误
- 删除指向指针的向量指针时出错
- 映射不同类型的向量指针
- 在c++中传递向量指针
- 虚拟类的向量:指针是干净的方法吗
- 如何从另一个向量/对象集构造新的向量/指针集
- 模型视图控制器- c++向量指针,太多的传递
- 为什么向量指针占用这么多内存?
- 删除条目向量指针的静态映射c++
- 复向量指针
- c++数组向量指针的初始化