Как я могу создать экземпляр структуры, который не будет удален, когда он находится вне области видимости? - PullRequest
0 голосов
/ 05 мая 2019

Я пытаюсь создать пользовательскую структуру данных в C ++, похожую на двойной связанный список. Поэтому внутри конструктора класса я создаю экземпляр структуры (см. Код ниже), но я не могу «сохранить» его при изменении области действия.

Я пытался создать экземпляр с ключевым словом new, но когда я запускаю свою программу с помощью отладчика, я вижу, что объекты, созданные в предыдущей области, «оптимизированы».

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

Я не уверен, что на самом деле означает «оптимизированный». Я использую CLion, и это сообщение было показано в отладчике при изменении области действия.

Код для структуры:

struct singleLinkNode {
    int column;
    int data;
    singleLinkNode *nextSingleNode;
};

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

Заранее спасибо!

1 Ответ

1 голос
/ 05 мая 2019

«Оптимизировано» означает, что

компилятор не нашел использования этой переменной, поэтому он решил, что она не нужна, и удалил ее из сгенерированной сборки

КогдаВаш код начнет использовать эту переменную (т.е. читать и записывать в нее), она больше не будет оптимизирована.

В качестве альтернативы, вы можете отключить оптимизацию компилятора (в gcc, что было бы сделано с -O0).flag).

Как отметил Игорь Тандетник в комментариях, ключевое слово new создает объект и помещает его в кучу.Этот объект будет жить до тех пор, пока вы не вызовете delete или ваша программа не завершит работу.
Однако компилятор заметил, что указатель, созданный с помощью new, никогда не используется, поэтому он оптимизировал его (возможно, для всего объекта, но это неизвестно).

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