7

これは非常に簡単な質問ですが、難しいと思います。char*a を aであるかのように扱いたいstd::string、たとえば:

    char *p = ...; // read a huge chuck from a file

    std::string s(p); // this is not what I want

したがって、コンストラクターを使用すると、p のコピーが取得されますが、これはメモリと時間の無駄です。どうにかしてこれを回避し、コンテンツを既存のアドレスに「割り当てる」ことはできますか?std::string

他のアイデアは大歓迎です!

ありがとう!

4

5 に答える 5

14

どうにかしてこれを回避し、コンテンツを既存のアドレスに「割り当てる」ことはできますか?std::string

いいえ。

ただし、に割り当てることはできますstd::string_view。今後は、std::string メモリを所有する以外のすべての使用をに置き換える必要がありますstd::string_view

于 2013-10-11T13:29:43.753 に答える
-2

なぜ使用しないのstd::vector<char>ですか?例えば:

std::vector<char> data;
data.resize( size );  // resize this to how much you need 

char* p = &data[0];

// now you have a pointer to the internal data in std::vector 
于 2013-10-11T13:33:43.137 に答える