@Ilya199

Правильны ли мои рассуждения в комментариях к коду?

#include <iostream>

int main()
{
	int num = 5; // объявление и инициализация целочисленной переменной
	int* a_num; // указатель на int/указывает на тип int
	int* aa_num = &num; // указывает на num

	int* aaa_num = new int; // выделение памяти во время выполнения программы. new ищет блок памяти 
					      // с типом int, возвращая его адрес. адрес присваивается переменной, которая
					      // объявлена как указатель

	return 0;
}
  • Вопрос задан
  • 124 просмотра
Решения вопроса 1
@majstar_Zubr
C++, C#, gamedev
У вас ошибка только в комментариях.
Данное выражение new ничего не ищет, оно по сути пытается выделить память, сконструировать и инициализировать в этой памяти объект указанного типа. В данном случае будет выделено sizeof(int) байт. Причем выделение будет осуществлять void* operator new ( size_t count ), который после стандарта C++11 вообще может выкинуть std::bad_alloc exception, а конструирования и инициализации не произойдет, потому как int - фундаментальный целочисленный тип.

Однако, современная практика написания кода на c++ подразумевает, что при использовании обычных указателей, каждое использование ключевого слова new сопровождается использованием ключевым словом delete в той же области видимости. Поэтому отсутствие delete aaa_num; считается ошибкой.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@vanyamba-electronics
Вы забыли
delete aaa_num; // Освобождение выделенной памяти
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы