gpt4 book ai didi

c++ - 从 STL std::queue 中删除而不破坏已删除的对象?

转载 作者:可可西里 更新时间:2023-11-01 18:02:16 24 4
gpt4 key购买 nike

我能在 STL 容器(队列和列表)上找到的所有文档都说,对于任何删除函数,都会调用已删除对象的析构函数。这意味着我无法在任何时候使用 std::queue 来获得一个队列,该队列只是一个需要对其执行某些操作的对象列表。

我希望能够在他们排队等待我对他们做某事时将他们添加到队列中。然后我想在完成处理后将它们从中删除,而不破坏相关对象。从我读过的文档来看,这似乎是不可能的。我误读了文档吗?除了基本的“队列”之外,STL 中是否还有其他类型的队列在调用 pop_front 时不调用已删除对象的析构函数?

编辑澄清:在我的例子中,我使用的是指针列表。像这样:

   dbObject *someObject;
queue<dbObject *> inputQueue;
inputQueue.push_back(someObject);

...

dbObject *objectWithInput = inputQueue.front();
//handle object's input...
inputQueue.pop_front(); // Remove from queue... destroyed now?

最佳答案

如果您将指向对象的指针放入队列(以及任何其他 STL 容器)中,那么当您删除它们时,这些指针不会被删除。

详细说明:当您使用 std::queue 并删除一个对象时,将调用 some_obj* 的析构函数。但是普通指针(或任何 POD 类型——int、char 等)的析构函数是空的,无操作。这里的细线是 some_obj* 的析构函数与 some_obj 的析构函数非常不同。

关于c++ - 从 STL std::queue 中删除而不破坏已删除的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1514311/

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