簡體   English   中英

C ++:使用析構函數在指針的靜態向量中刪除對象?

[英]C++: Deleting an Object in a static vector of pointers with the destructor?

這是我的班級設置方法:

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

    static vector<Foo*> foos;
}

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

假設我像這樣創建了一個Object Foo

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

我將如何刪除該對象以及靜態向量中的指針?

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;
}

...它會自行清理。

問題包括:

  • 不是線程安全的。
  • per deletion for instances. 對於實例,每次刪除的最壞情況時間為
  • 邪惡的全球狀態!

如果您對上述方法都沒問題,請繼續扳動扳機!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM