удалить и удалить [] то же в Visual C++?

Вам не нужно создавать таблицу для каждого пользователя. То, что вам нужно, это отношения «многие ко многим» между каждым пользователем и таблицей контактов. Вы можете прочитать больше о отношениях «многие ко многим» в документации

.

6
задан Mateen Ulhaq 12 May 2011 в 00:25
поделиться

5 ответов

Рассмотрите этот код:

class DeleteMe
{
public:
  ~DeleteMe()
  {
    std::cout << "Thanks mate, I'm gone!\n";
  }
};

int main()
{
  DeleteMe *arr = new DeleteMe[5];
  delete arr;
  return 0;
}

При выполнении этого в VS2005, он распечатает:

Thanks mate, I'm gone!

Если Вы изменяетесь main() правильно придерживаться стандарта C++:

int main()
{
  DeleteMe *arr = new DeleteMe[5];
  delete[] arr;
  return 0;
}

Это распечатает:

Thanks mate, I'm gone!
Thanks mate, I'm gone!
Thanks mate, I'm gone!
Thanks mate, I'm gone!
Thanks mate, I'm gone!

Не стреляйте себе в ногу. VS2005 НЕ сделает корректной вещи при несоответствии различным разновидностям новых/удаляющий. Ни один не будет никакой другой стандарт C++ совместимый компилятор.

Существует некоторое волшебство компилятора, продолжающееся вокруг operator new и operator delete (и их различные разновидности), в основном вызов к ctors и dtors добавляется негласно. Это волшебство зависит от тех маленьких скобок [], не теряйте их, или Вы потеряете волшебство.

26
ответ дан 8 December 2019 в 02:30
поделиться

Я предполагаю, что это - просто деталь реализации. Их средство выделения "кучи" работает тот же путь при освобождении массивов и указателей.

Но так как стандарт позволяет реализациям иметь различные алгоритмы для этих двух случаев, Вы действительно не должны принимать это delete и delete[] сделайте то же самое. Поведение могло бы даже измениться между версиями компилятора.

4
ответ дан 8 December 2019 в 02:30
поделиться

Возможно, данные, которые Вы удалили, не имели деструкторов? Если так, это простое удаляет, имел бы смысл. Это работает над пустотой*, в конце концов.

Так или иначе Вы, как предполагается, используете, удаляют [], чтобы удостовериться, что деструктор выполняется для каждого элемента в массиве.

2
ответ дан 8 December 2019 в 02:30
поделиться

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

Кроме того, можно использовать scoped_array для удаления массива.

2
ответ дан 8 December 2019 в 02:30
поделиться

Удаление массива без [] только освободит память, но НЕ назовет деструкторы в каждом объекте в массиве. Так, технически Вам только нужно [], если Ваш деструктор нужно назвать.

2
ответ дан 8 December 2019 в 02:30
поделиться
Другие вопросы по тегам:

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