繁体   English   中英

删除指针的向量

[英]Deleting vector of pointers

我需要创建一个类实例的指针,程序在编译时不知道我将创建多少指针。 为了删除,我正在考虑将指针存储在一个向量中,然后逐个删除它们。 智能指针的使用会更清晰吗? 如果一个人不想使用智能指针,那么这种向量的使用会被认为是干净的吗?

最低代码:

#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_vectorstd::vector<std::unique_ptr<Foo>> ,或者推出你自己的Foo管理器类,它包含一个vector<Foo*>并负责构造函数中的删除(您应该将此视为“专家”解决方案,并且只有在您完全理解异常安全时才尝试它)。 您不希望手动执行删除操作,这很容易导致错误。

你的代码很好。 但是,使用智能指针应该是首选(编写的代码更少,内存错误的机会更少)。

智能指针的使用会更清晰吗?

是。

如果一个人不想使用智能指针,那么这种向量的使用会被认为是干净的吗?

我没有想法,为什么有人不想在C ++中使用智能指针,如果它不是作业......但是,我认为,在这种情况下使用boost::pointer_containers类的东西会更好。

如果你没有使用从Foo派生的类,并且Foo复制构造相对便宜,只需使用vector<Foo>

如果您的编译器支持移动语义,那么应该没有问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM