非常感谢您所有有见地的回答!
这提醒了我为什么上次遇到这个问题时,我没有复制自己就手动编写了一个队列。我不能说我花了比弄清楚如何做漂亮、干净的版本花更多的时间。:)
所以..我所做的是:
解决方案 a) 就像在原始帖子中描述的那样,我创建了一个必须在从向量中删除类之前显式调用的函数。不太好,但效果很好,我不必弄乱其他任何东西,只要记住调用它。
解决方案 b) 我将数组放在另一个类中,并对该类使用了智能指针 (shared_ptr)。工作得非常好。我也必须使用 shared_ptr 作为向量的元素。(一开始我没有想到这一点。)
解决方案 c) 使用 shared_ptr 来保存一个数组。事实证明这是一个非常糟糕的主意,因为它调用 delete 而不是 delete [] 您需要提供您的自定义删除器,并且以某种方式出现了一些其他(语法)问题,因此我花了 2h+ 之类的时间来完成该解决方案。
它在头文件中看起来像这样:
template< typename T >
struct
array_deleter
{
void
operator ()( T const * p)
{ delete[] p; }
};
class MemoryStressChunk
{
private:
int chunkSizeInValues;
std::shared_ptr< __int64 > data;
};
并在代码文件中:
data.reset(
new __int64[chunkSizeInValues],
array_deleter< __int64 >() );
要使用它,我必须再次将其取出:
__int64 *d = data.get();
下次我可能会强烈考虑使用 boost 版本。我的机器上没有提升,所以这就是为什么它不是我的选择。
我认为解决方案 d) 是使用包含 shared_ptr 的类向量到向量(而不是数组)。毕竟我和 c) 玩得很开心,但我并没有这样做。:)
如果有人想看一下代码,你可以在这里得到它http://andreas-reiff.de/wp-content/uploads/2011/01/Tool-MemTester.zip。请注意版本 a) 中可能存在 memleak(使用 shared_ptr 作为版本 b) 中的类)。
感谢您再次提供帮助!