Могу ли я переназначить / перезаписать std :: string? - PullRequest
0 голосов
/ 09 июля 2020

Могу ли я сделать следующее на C ++?

std::string a = "";
a = "hello";
a += ", good sir";
//use a in the program
a = "";
a = "bye";
a += " to you";
//use it for something else

Если это не законная операция, могу ли я столкнуться с проблемами памяти в дальнейшем? Этот последний пункт важен для меня, потому что у меня есть некоторые из них, и я пытаюсь выяснить, откуда они.

Ответы [ 2 ]

1 голос
/ 09 июля 2020

Да, вы можете повторно использовать одну и ту же переменную для нескольких целей одну за другой. Но на самом деле я не рекомендую вас, программа будет немного запутанной, если вы будете использовать только одну переменную для многократного использования.

Класс std::string автоматически выделяет требуемую память в байтах для хранения строкового литерала и перераспределяется при изменении строки.

Например:

#include <iostream>

std::string a = "hello"; // global a, allocates the required memory

int main(void) {
    std::string a = "world"; // local a, allocates the required memory
    ::a = "hello changed";   // accessing global a (reallocates memory)

    std::cout << a << std::endl; // local a
}

Тем не менее, нет проблем использовать его дважды и чаще. Но позаботьтесь о своем коде и убедитесь, что он правильно очищен перед вторым или n-м использованием.

0 голосов
/ 09 июля 2020

Это должно работать нормально, не беспокойтесь

std :: string выделяет память по мере необходимости

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...