Вам не нужно создавать таблицу для каждого пользователя. То, что вам нужно, это отношения «многие ко многим» между каждым пользователем и таблицей контактов. Вы можете прочитать больше о отношениях «многие ко многим» в документации
.
Рассмотрите этот код:
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 добавляется негласно. Это волшебство зависит от тех маленьких скобок [], не теряйте их, или Вы потеряете волшебство.
Я предполагаю, что это - просто деталь реализации. Их средство выделения "кучи" работает тот же путь при освобождении массивов и указателей.
Но так как стандарт позволяет реализациям иметь различные алгоритмы для этих двух случаев, Вы действительно не должны принимать это delete
и delete[]
сделайте то же самое. Поведение могло бы даже измениться между версиями компилятора.
Возможно, данные, которые Вы удалили, не имели деструкторов? Если так, это простое удаляет, имел бы смысл. Это работает над пустотой*, в конце концов.
Так или иначе Вы, как предполагается, используете, удаляют [], чтобы удостовериться, что деструктор выполняется для каждого элемента в массиве.
Просто, потому что они могли бы работать то же теперь, не означает, что можно обязательно рассматривать их то же - поведение могло измениться. И кроме того, кто заботится - необходимо написать код, таким образом, Вы не должны помнить.
Кроме того, можно использовать scoped_array для удаления массива.
Удаление массива без [] только освободит память, но НЕ назовет деструкторы в каждом объекте в массиве. Так, технически Вам только нужно [], если Ваш деструктор нужно назвать.