Вектор надежно стирает свою памятьC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Вектор надежно стирает свою память

Сообщение Anonymous »


Мне нужно создать безопасный самоочищающийся буфер памяти, который не оставляет следов своего содержимого в памяти при очистке или выходе за пределы области действия.

В моем примере кода показано сравнение моего первого экспериментального вектора Vectorc и std::vector. В выводе вы можете видеть, что Vectorc перезаписывает свою память при вызове метода Clear(), в то время как содержимое std::vector все еще доступно после Clear().

Я боюсь, что в некоторых случаях компилятор может оптимизировать перезапись памяти, если доступ к памяти больше не осуществляется после очистки() или выхода за пределы области действия (деструктора). Допустимо ли использование летучих данных, как в строке, закомментированной в Clear()? Memset() не любит летучий void*, поэтому мне пришлось его снова отбросить. Должен быть лучший способ сделать это.

Я знаю, что растущий вектор и изменение размера могут оставить содержимое позади, поскольку блок памяти может быть перемещен в другое место, но давайте проигнорируем этот момент, чтобы пример был коротким.

Я получаю доступ к памяти после size() вплоть до емкости(). Это может привести к неопределенному поведению, или я так делаю?

Есть мысли по этой теме? Есть ли лучшие решения?

vectorc.cpp:

#include #include #include template class Vectorc: public std::vector { публика: ~векторк() { прозрачный(); } пустота очистить() { // изменчивый T* ptr = std::vector::data(); ??? T* ptr = std::vector::data(); memset((void*)ptr, 0, std::vector::capacity()); // Возможно, размер был уменьшен, поэтому размер может оставить память?! std::vector::clear(); } }; void printmem(const std::vector& v) { const char* ptr = v.data(); std::cout
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»