C++: эффективная подкачка () при использовании пользовательского средства выделения

Это, кажется, месяц шаблонов C++ для меня...

у меня есть SecureString. Взгляды SecureString точно так же, как станд.:: последовательность, кроме него использует пользовательское средство выделения, которое обнуляет на разрушении:

class SecureString
{
public:
  typedef std::basic_string< char, std::char_traits, zallocator > SecureStringBase;
  typedef zallocator::size_type size_type;
  static const size_type npos = static_cast(-1);
  ....
private:
  SecureStringBase m_base;
};

полный код для SecureString может быть найден в http://code.google.com/p/owasp-esapi-cplusplus/source/browse/trunk/esapi/util/SecureString.h; и код для средства выделения может быть найден в http://code.google.com/p/owasp-esapi-cplusplus/source/browse/trunk/esapi/util/zAllocator.h.

В настоящее время, мы имеем , подкачка определила, который берет станд.:: представить в виде строки как аргумент:

void SecureString::swap(std::string& str)
{
  SecureStringBase temp(str.data(), str.size());
  m_base.swap(temp);
  str = std::string(temp.data(), temp.size());
}

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

РЕДАКТИРОВАНИЕ: SecureString:: подкачка (станд.:: ул. string&) теперь не стал. Ссылку на функцию в этом потоке оставили на месте для потомства.

Jeff

14
задан jww 5 September 2011 в 11:21
поделиться