我在 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 的析构函数非常不同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)