Skip to content

Comments

[DRAFT] C++ chapter 15.4#347

Open
Microvenator wants to merge 2 commits intomainfrom
cpp-chapter-15-3
Open

[DRAFT] C++ chapter 15.4#347
Microvenator wants to merge 2 commits intomainfrom
cpp-chapter-15-3

Conversation

@Microvenator
Copy link
Contributor

ПОКА НЕ ГОТОВ

Перед доступом к объекту указатель `void *` приводится к нужному типу.

Если `malloc()` не удается выделить память, функция возвращает сишный `NULL`, то есть `nullptr` в C++.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

возвращает сишный NULL, то есть nullptr

это одно и то же, не надо пугать пользователями разными нулами :)

возвращает NULL / возвращает nullptr

или

возвращает NULL (он же nullptr)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Поправила

Comment on lines 67 to 69

Соответственно, второй вариант использования `malloc()` и `free()` заключается в отказе от сишного хедера `stdlib.h` в пользу хедера C++ `cstdlib` или модуля `std`. Перепишем наш пример, чтобы вызвать функции из пространства имен `std`:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Это подталкивало знакомившихся с C++ сишников применять новые языковые возможности.

Не подталкивает, обычно используют Си-шные варианты функций. Предлагаю это предложение убрать, сократить текст и объединить абзацы этот и следующий. Например:

Пространства имен, появившиеся еще на заре C++, позволяют предотвращать конфликты имен и удобно группировать код. Функции библиотеки рантайма Си были добавлены в пространство имен std. Для использования функций управления памятью необходимо подключить заголовок cstdlib или модуль std. Перепишем наш пример:

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Переписала. Взяла твой вариант.

```

Разницы между `malloc()` / `free()` и `std::malloc()` / `std::free()` нет. Просто второй вариант чуть менее сишный. Но оба варианта плохи. Их не рекомендуется использовать в современном C++ без явной необходимости. Вот основные причины:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Просто второй вариант чуть менее сишный.

Просто второй вариант более плюсовый / идиоматичный.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Заменила.

Comment on lines 89 to 90
- `malloc()` возвращает указатель `void *`, и вам нужно самостоятельно приводить его к указателю на нужный тип.
Copy link
Collaborator

@khva khva Feb 21, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Самое важное, что не происходит инициализация. Хотелось бы это подчеркнуть:

  • для простых типов требуется инициализация,
  • для других — ручной вызов конструктора.

А преобразование указателя это менее важное и про это уже сказано.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Добавила эти подпункты.

@Microvenator Microvenator force-pushed the cpp-chapter-15-3 branch 3 times, most recently from 3326bff to f83be66 Compare February 21, 2026 12:33
@Microvenator Microvenator changed the title [DRAFT] C++ chapter 15.3 [DRAFT] C++ chapter 15.4 Feb 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants