0

我在我的程序中创建了一个 STXXL 优先级队列。如果我不再需要PQ,如何删除它?就像 C++ 中的 delete[] 缓冲区一样。我想释放它使用的内存。

我查看了他们的示例和描述,但找不到方法。一旦创建了一个PQ,内存会一直被这个PQ占用到程序结束吗?

例如,如果我定义了两个优先级队列:Q1 和 Q2。

typedef stxxl::PRIORITY_QUEUE_GENERATOR <
   SufNode<unsigned char>,
   ComparatorGreater<unsigned char>,
   mem*1024*1024, 1024*1024
 >::result pqueue_type0;

 pqueue_type0 Q1(pool1); 

然后我对 Q1 做一些事情,然后删除它,这样我就可以为 Q2 分配更多的内存。

typedef stxxl::PRIORITY_QUEUE_GENERATOR<
   SufNode<unsigned char>,
   ComparatorGreater2<unsigned char>,
   mem*1024*1024, 1024*1024
>::result pqueue_type20;

pqueue_type20 Q2(pool2); 
4

1 回答 1

0

当 Q1 超出范围时,它的内存将被自动释放。所以不要把所有东西都放在一个大函数中。把 Q1 和你用它做的事情放在一个函数中,把 Q2 放在另一个函数中。

最大的问题是,如果需要 Q1 来创建 Q2,并且需要 Q2 来创建 Q3,等等。在这种情况下,std::unique_ptr<pqueue_type0>可以很方便。

于 2014-11-27T12:22:29.103 回答