Создайте новый указатель структуры и карту размещения

#c

Вопрос:

у меня есть вопрос.

     struct sInfos
    {
        const char* name;
        int8_t       id;
        int8_t        departmant;
    };

    std::map<int8_t, sInfos*> map_try;

    const autoamp; info = new sInfos;
    info->name = "asd"; 
    info->id = 0;
    info->departmant = 0;
    map_try.emplace(id(parametre), info);
    //delete info; // HERE
 

когда я закодировал новый регистр, я использую new sInfos его, но не удаляю, потому что, когда я пишу delete info или unique_ptr или make_unique у меня возникают проблемы (карта путается (время выполнения)). В этих кодах есть какие-либо утечки? Извините за плохой английский, спасибо всем.

Комментарии:

1. Да, это так. new без delete -это утечка памяти, простая и понятная. Вот почему разработчики C не любят использовать new . Современный C — это в основном unique_ptr и другие типы контейнеров. В вашем случае вам действительно даже не нужен указатель, просто сделайте std::map<std::string, sInfos> это . ( std::string потому что комментарий ВозкРайга также является отличным аргументом)

2. Я сильно подозреваю, что полученная вами карта здесь не будет тем, что вы намереваетесь. const char * ключ без компаратора карт клиентов для заказа не будет заказывать (и этот ключ) карту так, как вы думаете. Порядок в представленном виде будет основываться на глобальном порядке адресов памяти значений указателей, а не на порядке строковых значений. Если бы первое было вашим намерением, так тому и быть, но это было бы так же странно, как и бессмысленно.

3. @SilvioMayolo спасибо за комментарий! Примеры кодов верны? (просто пример, так что это дерьмо) godbolt.org/z/WWaefdx93

4. Для удобства чтения, если вы используете необработанные указатели, вам следует писать auto *info = new sInfos; вместо const autoamp; info = new sInfos; . Если вы действительно хотите быть уверены, что указатель впоследствии не будет обновлен, то auto* const info = new sInfos; более четко отобразите намерение.

5. @WayneCox Это выглядит хорошо. Я по-прежнему рекомендую читать std::string и использовать его вместо const char* (первый ведет себя более интуитивно во многих ситуациях). Но ваш связанный код больше не будет пропускать память.