C ++:在Cache

时间:2016-01-25 10:20:22

标签: c++ string

我得到了一个字符串变量(包含密码),并且在变量释放之前会like to overwrite it's value with a sequence of '0'。我想做类似的事情:

void overwrite(std::string &toOverwrite){
    if(toOverwrite.empty())
        return;
    else{
        std::string removeString;
        size_t length = toOverwrite.size();
        for(int i = 0; i < length; i++){
            removeString += "0";
        }
       toOverwrite = removeString;
    }    
}

但不知怎的,这感觉不对。

  1. 首先是因为它似乎在for循环中产生了很多开销。
  2. 而且我不确定最后一行是否真的会覆盖字符串。我知道,例如在Java中,字符串是不可变的,因此根本无法覆盖。它们在C ++中不是不可变的(至少不是std :: string),但toOverwrite = removeString真的会替换toOverwrite或只是使toOverwrite的“指针”指向removeString }?
  3. 我的编译器可能会optimize the code and removes this overwriting吗?
  4. 也许我应该使用std::string::replace方法或将数据类型更改为char * / byte []?

1 个答案:

答案 0 :(得分:2)

可能只是交换和释放指针,将密码保留在内存中不再指向的位置。如果要覆盖字符串数据,请执行以下操作:

std::fill(toOverwrite.begin(), toOverwrite.end(), '0');

您也不需要测试空字符串。