我有一个pipe-filtern模板类。类模板如下所示:
template<class T, class O, class F>
class hdm::filter::Filter
T是输入类型类,O是输出类型。 F是实现过滤器的具体过滤器类 - 但现在这应该是无关紧要的。
过滤器模板类的运行循环是:
void run() noexcept
{
pthread_setname_np(getThreadName());
while(_running) {
T obj;
_skip = false;
while(!_inputqueue->wait_dequeue_timed(obj,chrono::milliseconds(IDLE_LOOP)) && _running);
if(!_running) break;
O objout = reinterpret_cast<F*>(this)->process(obj);
if(_outputqueue != nullptr && !_skip) {
push_results(objout);
}
}
}
在其中一个具体的过滤器类中,过滤器模板类处理的对象“O”的构造如下:
std::vector<CellLoadInfo*>* referencedCells = new std::vector<CellLoadInfo*>;
下一个过滤器只获取一个CellLoadInfo对象。
现在即使这是一个指针对象,当对象超出上面过滤器的运行循环范围时,似乎会调用CellLoadInfo的析构函数两次。
为什么要两次调用它,以及如何避免它?