Вектор надежно стирает свою память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 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему std::vector::clear() не стирает память, позволяя мне получить доступ к старым данным?
    Anonymous » » в форуме C++
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • C++ вектор = {vec1.begin, vec1.begin} возвращает пустой вектор
    Гость » » в форуме C++
    0 Ответы
    137 Просмотры
    Последнее сообщение Гость
  • Как объединить элемент в вектор, не вставляя его в вектор?
    Anonymous » » в форуме C++
    0 Ответы
    77 Просмотры
    Последнее сообщение Anonymous
  • C++ Вернуть вектор в вектор
    Anonymous » » в форуме C++
    0 Ответы
    41 Просмотры
    Последнее сообщение Anonymous
  • Как передать вектор и вектор> из Java в функцию С++ с помощью jna [закрыто]
    Anonymous » » в форуме C++
    0 Ответы
    42 Просмотры
    Последнее сообщение Anonymous

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