洞察に満ちたすべての回答に感謝します。
これは、前回この問題が発生したときに、自分自身をコピーせずにキューをハンドコーディングした理由を思い出させてくれます。素敵でクリーンなバージョンを実行する方法を理解するよりも、はるかに時間がかかったとは言えません。:)
だから..私がしたことは次のとおりです。
解決策 a) 元の投稿で説明したように、ベクトルからクラスを削除する前に明示的に呼び出さなければならない関数を作成しました。良くはありませんが、うまく機能し、他に何もいじる必要はありませんでした。呼び出すことを忘れないでください。
解決策 b) 配列をさらに別のクラスに配置し、そのクラスへのスマートポインター (shared_ptr) を使用しました。本当にうまくいきました。vector の要素として shared_ptr も使用する必要がありました。(最初は思いつきませんでした。)
解決策 c) shared_ptr を使用して配列を保持します。結局のところ、delete [] の代わりに delete を呼び出すため、カスタムのデリータを提供する必要があり、何らかの形で他の (構文) 問題が発生したため、その解決策を実行するのに 2 時間以上かかりました。
ヘッダーファイルでは次のようになります。
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();
次回はブーストバージョンの使用を強く検討するかもしれません. 私のマシンにはブーストがなかったので、オプションではありませんでした。
解決策 d) は、shared_ptr を含むクラスのベクトルを (配列の代わりに) ベクトルに使用することだと思います。私がcで楽しんだすべての後、私はそれを上にやりませんでした。:)
誰かがコードを見たい場合は、ここから入手できますhttp://andreas-reiff.de/wp-content/uploads/2011/01/Tool-MemTester.zip。バージョン a) にはおそらく memleak があることに注意してください (バージョン b) のように、クラスには shared_ptr を使用します)。
もう一度助けてくれてありがとう!