C ++:使用析构函数删除指针的静态向量中的对象?

时间:2014-11-13 04:01:43

标签: c++ pointers vector static destructor

以下是我班级的设置方式:

class Foo{
    public:
    Foo();
    ~Foo();

    static vector<Foo*> foos;
}

Foo::Foo(){
    foos.push_back(this);
}
Foo::~Foo(){}

我们假设我创建了一个像这样的对象Foo

int main(){
    Foo *obj = new Foo();
}

如何删除此对象以及静态向量中的指针?

1 个答案:

答案 0 :(得分:3)

Foo::~Foo的实施更改为

Foo::~Foo()
{
    foos.erase(std::find(foos.begin(), foos.end(), this));
}

...使用std::unique_ptr ...

int main(int argc, char **argv)
{
    std::unique_ptr<Foo> ptr{new Foo{}};

    return 0;
}

......它会自行清理。

问题包括:

  • 不是线程安全的。
  • n 实例每次删除 O(n)的最坏情况时间。
  • 邪恶的全球状态!

如果您对上述内容感到满意,请继续并扣动扳机!