C++, отказы Seg и управление памятью

Я перемещаюсь от Java до C++ и действительно наслаждался им. Одна вещь, которой я не наслаждаюсь, не понимает памяти вообще, потому что Java раньше делал это для меня.

Я купил книгу: Память как Концепция программирования в C и C++ - Frantisek Franek

Есть ли некоторые хорошие сайты для меня, чтобы пойти и узнать в интерактивном режиме о C/C++ и использовании памяти (учебные руководства, форумы, группы пользователей)?

6
задан Stephano 9 February 2010 в 19:44
поделиться

2 ответа

Один последний метод не упомянут. Вместо того, чтобы цитировать/избегать каждого использования, вы можете отключить глоббинг. Таким образом, если вы хотите использовать калькулятор много, вы не должны избегать каждого использования:

# For bash
set -o noglob

# For csh/tcsh
set noglob

# Now that noglob is set, you can safely use *
calc 3 * 3
-121--4551158-

Одной из причин опыта Vista, предположительно, было то, что MSFT сократил «простые человеческие» тестеры в пользу тестеров-программистов, которые написали сценарии.

Конечно, сценарии не заметили таких вещей, как широкий диапазон различных тем, когда вы углубились в панель управления, или диалоги оценки копирования или другие «второстепенные» функции GUI, которые заставили весь продукт выглядеть дерьмово

-121--3027767-

Попробуйте:

http://www.mycplus.com/tutorials/cplusplus-programming-tutorials/memory-management/

http://www.cantrip.org/wave12.html

http://linuxdevcenter.com/pub/a/linux/2003/05/08/cpp_mm-1.html

И в викибуке: http://en.wikibooks.org/wiki/C++_Programming/Memory_Management

Эта статья сравнит операторов управления памятью Java с эквивалентами C++: http://www.javamex.com/java_equivalents/memory_management.shtml

http://www.infosys.tuwien.ac.at/Staff/tom/Teaching/UniZH/CPP/slides/cpp_07.pdf

Надеюсь, что это поможет вам!

2
ответ дан 17 December 2019 в 00:09
поделиться

Управление памятью в C++ почти автоматическое (с некоторыми оговорками).

Большую часть времени не надо динамически выделять память.
Используйте локальные переменные (и обычные переменные-члены), и они будут создаваться и уничтожаться автоматически.

Когда вам нужны указатели, используйте умные указатели.
Начните с использования boost::shared_pointer вместо указателей.
Это поможет вам встать на правильный путь и перестать случайно удалять память в неподходящий момент, и 90% вашего кода будет освобождаться правильно (к сожалению, циклы создадут проблему (только в плане утечек), и вам нужно будет разработать соответствующий дизайн (но у нас есть другие умные указатели для работы с циклами weak_ptr))

Мое фундаментальное правило заключается в том, что класс никогда не должен содержать RAW-указатель. Всегда используйте какую-либо форму стандартного контейнера или умный указатель. Используя их, вызовы деструктора становятся автоматическими.

Как только у вас появится это чувство, начните читать о других умных указателях и о том, когда их следует использовать:

Умные указатели: Или кто владеет тобой, детка?

5
ответ дан 17 December 2019 в 00:09
поделиться