Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2015, 20:12   #1
chipside
Форумчанин
 
Регистрация: 03.08.2013
Сообщений: 208
По умолчанию Поддержка nullptr в g++. Как её определить в коде?

Добрый вечер (по Омску)!
Я чаще использую древнюю ОС ASPLinux 14.0 Cobalt, в которой ещё нет поддержки nullptr. Мой компьютер сильно тормозит с современными ОС.
Пытаюсь написать программу, хотя получается очень тяжело.
Ещё не разу не доводил свои поделки на C++ до логического завершения.
Так дурью маялся.
У меня компилятор g++.
Интересует, как определить, поддерживает ли компилятор этот МЕТОД(? или что это вообще)?
К примеру, через #ifdef.
Я к тому, что хоть и пользуюсь старой ОС, хочу написать полноценное современное приложение, которое в новом g++ имело бы возможность очищать динамическую память более безопасным способом.
И если можно приведите пример в Makefile и в самом коде c++.

Последний раз редактировалось chipside; 11.11.2015 в 20:14.
chipside вне форума Ответить с цитированием
Старый 11.11.2015, 21:28   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

nullptr это не метод и он не дает "возможность очищать динамическую память более безопасным способом. Это упрощенно null для указателей.
В гцц он поддерживается с версии 4.6. Если у вас выше, то включайте опцию на 0х или с++11 и вперед.
p51x вне форума Ответить с цитированием
Старый 11.11.2015, 21:39   #3
chipside
Форумчанин
 
Регистрация: 03.08.2013
Сообщений: 208
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
nullptr это не метод и он не дает "возможность очищать динамическую память более безопасным способом. Это упрощенно null для указателей.
В гцц он поддерживается с версии 4.6. Если у вас выше, то включайте опцию на 0х или с++11 и вперед.
А что это такое? Если не метод. Когда в g++ просто удаляешь массивы, то всё равно элементы могут содержать неочищенные данные. nullptr их очищает. Можно, конечно пройтись циклом по каждому, но всё же хотелось заложить в код, что-то типа #ifdef __nullptr или что-то в этом роде.
chipside вне форума Ответить с цитированием
Старый 11.11.2015, 21:42   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Вы о чем? Покажите свой магический код удаления массивов с помощью nullptr что ли.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 11.11.2015, 21:55   #5
chipside
Форумчанин
 
Регистрация: 03.08.2013
Сообщений: 208
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Вы о чем? Покажите свой магический код удаления массивов с помощью nullptr что ли.
Да нет.
Я читал, что nullptr используется после удаления массивов.
delete [] myMassive;
myMassive == nullptr;
Как раз таки хотелось обрамить последнюю строку условием использования.
chipside вне форума Ответить с цитированием
Старый 11.11.2015, 21:57   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Во-первых, там один знак =, иначе это сравнение
Во-вторых, вы просто затираете указатель, а данные не факт. Могли бы написать myMassive = 11111
p51x вне форума Ответить с цитированием
Старый 11.11.2015, 22:06   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну так можно и без nullptr написать myMassive = 0
Но это делают не для того чтоб что-то удалить магическим образом, а скорее для удобства/безопасности, чтоб не обратиться случайно к указателю после удаления (ну точнее чтоб явно заметить, что это произошло) и т.п.

А вообще лучше не управлять самому памятью без необходимости. Использовать STL контейнеры, RAII, smart-указатели и т.д.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 11.11.2015, 22:08   #8
chipside
Форумчанин
 
Регистрация: 03.08.2013
Сообщений: 208
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Во-первых, там один знак =, иначе это сравнение
Во-вторых, вы просто затираете указатель, а данные не факт. Могли бы написать myMassive = 11111
Да. Пожалуй таки один знак равно. Наверное источник, в который я смотрел, когда писал код был некорректен. А я не проанализировал как следует другие варианты. Так всё же, по поводу самого главного вопроса у вас есть ответ? Можно ли использовать в данном контексте #ifdef и как, учитывая, что пользователи могут использовать разные стандарты Си плюс плюс, а значит и разные ключи.
chipside вне форума Ответить с цитированием
Старый 11.11.2015, 22:11   #9
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Вы правда хотите писать
Код:
#ifdef нуллптр
    arr = nullptr;
#endif
    arr = 0;
?
Чот это извращение какое-то. Проще тогда только второй вариант оставить.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 11.11.2015, 22:25   #10
chipside
Форумчанин
 
Регистрация: 03.08.2013
Сообщений: 208
По умолчанию

можно написать что-то типа

Код:
int * a;
a = new int[10];
int x = 0;
for (; x < 10; x++ ) a[y] = x*10;
for (int y = 0; y < x; y++) a[x] = 0;
Я не смыслю толк в извращениях, просто хочу примерно так.
Код:
int * a;
a = new int[10];
int x = 0;
for (; x < 10; x++ ) a[x] = x*10;
delete [] a;
#ifdef nullptr
a = nullptr;
#endif
Только пока не въезжаю, как реализовать.
chipside вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
26|error: 'nullptr' was not declared in this scope| taras-proger Общие вопросы C/C++ 2 08.09.2015 14:02
Определить по коду алгоритм сортировки и исправить специально допущенные в коде ошибки ( Turbo Delphi ) Just-Joni Помощь студентам 0 26.12.2013 12:24
Не получается найти ошибку в коде нужно определить размеры дисков C++ Borland kolyok333 Помощь студентам 4 15.01.2012 15:53
Cuda, openCL: как определить, есть ли поддержка xpu Visual C++ 1 27.08.2011 03:36
Поддержка казахского языка. Как? eremin Общие вопросы Delphi 1 01.12.2007 06:30