gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 01:42:26 25 4
gpt4 key购买 nike

我的类(class)是这样设置的:

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

static vector<Foo*> foos;
}

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

假设我创建了一个对象Foo,如下所示:

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

我将如何删除这个对象,以及静态 vector 中的指针?

最佳答案

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)
  • 邪恶的全局状态!

如果您同意以上内容,请继续扣动扳机!

关于C++:使用析构函数删除静态指针 vector 中的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26901120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com