станд.:: строка в структуре - проблемы Копии/присвоения?

Предположим, что у меня есть структура, содержащая станд.:: строка, как это:

struct userdata{
        int uid;
        std::string username;
    }

Я должен создать копию ctor или что-нибудь, чтобы возвратить его из функции или использовать его в контейнере STL? Рассмотрите эту функцию:

userdata SomeClass::GetUserData(unsigned int uid)
{
    //do error checking and other stuff...
    //m_usermap is std::map<unsigned int, userdata>
    return m_usermap[uid];
}

Когда я вставляю userdata структуры в станд.:: карта, копия структуры создается, правильно? Делает новый станд.:: строка получает созданное использование значения поля имени пользователя, или своего рода поразрядная копия происходит (это было бы плохо)? Точно так же, когда я возвращаю userdata структуру из метода GetUserData, это имеет независимую строку, содержащую имя пользователя, или я должен определить копию ctor и явно создать новую строку?

5
задан alanc10n 5 January 2010 в 23:48
поделиться

4 ответа

[

]std::string [] имеет ссылку, а его [] конструктор копирования. Так что беспокоиться не о чем. Все обрабатывается корректно. [

]
0
ответ дан 18 December 2019 в 11:57
поделиться

Ты не должен делать ничего особенного. С++ (и реализация STL) определяют это, чтобы просто работать.

.
10
ответ дан 18 December 2019 в 11:57
поделиться

До тех пор, пока у вас нет указателей, как у членов вашей базы данных, вы будете в порядке.

2
ответ дан 18 December 2019 в 11:57
поделиться

std::строки сами по себе могут быть скопированы без проблем.

Когда вы определяете класс (или структуру), C++ по умолчанию сгенерирует для вас ряд методов, включая конструктор копирования и оператор присваивания. Я считаю, что сгенерированный конструктор копирования будет вызывать конструктор копирования по каждому из полей, а сгенерированный оператор присваивания будет вызывать оператор присваивания по каждому из полей. По мере копирования Вашей структуры userdata, конструктор копирования std::string будет вызываться для поля имени пользователя.

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

3
ответ дан 18 December 2019 в 11:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: