Список - очередь (C ++) [дубликат]

MySQLi намного безопаснее, чем MySQL, который в любом случае устарел. Вот почему вы должны придерживаться MySQLi, а также вы не можете смешивать их, поскольку они оба разные.

14
задан Eric Leschinski 7 July 2013 в 20:21
поделиться

7 ответов

new выделяет объем памяти, необходимый для хранения запрашиваемого объекта / массива. В этом случае n чисел int.

Затем указатель сохранит адрес в этом блоке памяти.

Но будьте осторожны, этот выделенный блок памяти не будет освобожден, пока вы не скажите это, написав

delete [] array;
18
ответ дан ANisus 21 August 2018 в 18:35
поделиться
  • 1
    Могу ли я предложить, чтобы вы отредактировали это, чтобы сказать что-то вроде «, но вы должны сделать std::vector<int> array(5);, поскольку это правильный способ создания такого объекта в C ++». – Aaron McDaid 12 July 2015 в 15:20
  • 2
    ... потому что, например, если функция возвращается раньше (например, генерируется исключение), тогда delete не будет вызван. В принципе, обычные разработчики никогда не должны явно вводить new (или delete) в современный C ++. – Aaron McDaid 12 July 2015 в 15:21
  • 3
    – Ben Voigt 12 July 2015 в 15:28
  • 4
    Моя точка зрения заключается не столько в том, что vector идентична int [n]. Если мы предположим, что нам нужен безопасный ответ на исходный вопрос, у нас действительно есть только два варианта: unique_ptr<int[]> и vector<int>. Первый может быть «более чистым», но я уверен, что большинство из нас (включая вас возможно?) Будут использовать vector для решения актуальной проблемы, с которой сейчас сталкивается вопрошающий. Мы не знаем полного контекста их текущего назначения программирования, но это справедливая ставка, что vector - это решение, которое большинство из нас будет использовать. – Aaron McDaid 12 July 2015 в 15:47

Операция в основном делает следующее:

  1. Создает целочисленный массив элементов 'n'
  2. Выделяет память в HEAP-памяти процесса, когда вы используете new для создания указателя
  3. Возвращает действительный адрес (если выделение памяти для требуемого размера, если оно доступно в момент выполнения этого оператора)
6
ответ дан aeon 21 August 2018 в 18:35
поделиться

Он выделяет пространство в куче, равное целочисленному массиву размера N, и возвращает указатель на него, который присваивается указателю типа int * «array»

1
ответ дан DhruvPathak 21 August 2018 в 18:35
поделиться

Начиная с C ++ 11, безопасный для памяти способ сделать это (все еще используя аналогичную конструкцию) с помощью std::unique_ptr :

std::unique_ptr<int[]> array(new int[n]);

Это создает умный указатель на блок памяти, достаточно большой для целых чисел n, который автоматически удаляет себя, когда он выходит из области видимости. Эта автоматическая очистка важна, потому что она избегает сценария, когда ваш код рано уходит и никогда не достигает вашего оператора delete [] array;.

Другой (вероятно, предпочтительный) вариант должен был бы использовать std::vector , если вам нужен массив, способный к динамическому изменению размера. Это хорошо, когда вам нужно неизвестное пространство, но оно имеет некоторые недостатки (непостоянное время для добавления / удаления элемента). Вы можете создать массив и добавить к нему элементы с чем-то вроде:

std::vector<int> array;
array.push_back(1);  // adds 1 to end of array
array.push_back(2);  // adds 2 to end of array
// array now contains elements [1, 2]
0
ответ дан Engineero 21 August 2018 в 18:35
поделиться

Он выделяет столько места в соответствии со значением n, и указатель укажет на массив i.e 1-й элемент массива

int *array = new int[n];
1
ответ дан Javascript is GOD 21 August 2018 в 18:35
поделиться

Оператор new выделяет пространство для блока из целых чисел n и присваивает адрес памяти этому блоку переменной int* array.

Общий вид нового, применимый к одномерным массивам, выглядит следующим образом:

array_var = new Type[desired_size];
-1
ответ дан Lyndsey Ferguson 21 August 2018 в 18:35
поделиться
int *array = new int[n];

Он объявляет указатель на динамический массив типа int и размер n.

Немного более подробный ответ: new выделяет память размером, равной sizeof(int) * n байтам, и возвращает память, которая хранится переменной array. Кроме того, поскольку память динамически распределяется с помощью new, вы должны освободить ее вручную, написав (когда вам больше не нужно, конечно):

delete []array;

В противном случае ваша программа будет памяти утечки не менее sizeof(int) * n байтов (возможно, больше, в зависимости от стратегии распределения, используемой реализацией).

9
ответ дан paxdiablo 21 August 2018 в 18:35
поделиться
  • 1
    Нет, он не инициализирует память нулем. И array на самом деле является указателем на int, а не на массив. И утечка памяти будет, по крайней мере, того размера, о котором вы упомянули, но это может быть легко. – Neil Butterworth 25 April 2011 в 09:25
  • 2
    @Nawaz. Ссылка на язык C ++ - это стандарт C ++, а не какой-то код кода, который вы написали, который случайно подтверждает ваше утверждение. – Neil Butterworth 25 April 2011 в 09:29
  • 3
    s5.3.4 / 15 состояний ", если инициализация не выполняется, объект имеет неопределенное значение". В разделе 8.5, где указаны правила инициализации по умолчанию, состояния для массива без явного init, каждый элемент по умолчанию инициализирован. По умолчанию-init для int (без явно конструктора) не выполняется "никакая инициализация не выполняется". Таким образом, int массивы являются неопределенными. Поэтому я не думаю, что ваш аргумент правильный, @ Наваз. – paxdiablo 25 April 2011 в 09:45
  • 4
    @unapersson, в то время как он может выделять больше памяти, чем это, вы не можете использовать любой из дополнительных, не вызывая неопределенное поведение. Следовательно, насколько вам известно, вы должны предположить, что у вас есть только точно , о чем вы просили. Единственный раз, когда вы столкнетесь с проблемами, - если вы делаете много небольших распределений, чтобы потери были высокими. – paxdiablo 25 April 2011 в 10:59
  • 5
    @paxdiablo Мой первоначальный момент был о количестве памяти, о котором говорит Наваз, а не о законности или о доступе к этой памяти. – Neil Butterworth 25 April 2011 в 11:12
Другие вопросы по тегам:

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