Большое спасибо за все ваши проницательные ответы!
Это напоминает мне, почему в прошлый раз, когда у меня была эта проблема, я вручную кодировал очередь, не копируя себя.Не могу сказать, что это заняло у меня намного больше времени, чем понимание того, как сделать красивую, чистую версию.:)
Итак .. что я сделал:
Решение a) Как описано в исходном посте, я создал функцию, которую нужно было явно вызывать перед удалением класса из вектора.Не очень хорошо, но он работал отлично, и мне не пришлось возиться с чем-то еще, просто не забудьте назвать его.
Решение б) Я поместил массив в еще один класс и использовал для этого smartpointer (shared_ptr)учебный класс.Работал действительно приятно.Мне пришлось использовать shared_ptr s как элементы вектора.(Сначала я не думал об этом.)
Решение c) Использование shared_ptr для хранения массива.Как оказалось, идея довольно плохая, так как она вызывает delete вместо delete [], вам нужно предоставить свой собственный deleteter и каким-то образом возникли другие (синтаксические) проблемы, поэтому мне потребовалось что-то вроде 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();
В следующий раз я мог бы настоятельно рассмотреть возможность использования буст-версий.У меня не было наддува на моей машине, поэтому для меня это не вариант.
Я так понимаю Решение d) будет использовать вектор классов, содержащий shared_ptr s, для вектора (вместо этого).массива).После всего того, что я имел с c), я не делал этого на вершине.:)
Если кто-то хочет взглянуть на код, вы можете получить его здесь http://andreas -reiff.de / wp-content / uploads / 2011/01 / Tool-MemTester.zip.Осторожно, возможно, в версии a) есть утечка памяти (используйте shared_ptr для класса, как в версии b)).
Спасибо за вашу помощь еще раз!