В реальном мире (я понимаю из вашего предыдущего вопроса , что это для домашней работы), вы бы не реализовали свой собственный набор. Стандартная библиотека предоставляет эту функциональность (std::set
, если вы хотите сохранить элементы в порядке; std::unordered_set
, если вы используете C ++ 0x и / или имеете соответствующие расширения, и устанавливаете приоритет скорости над дополнительными функциями).
Вероятно, вам также следует взглянуть на некоторые классы интеллектуальных указателей.
Это говорит:
В вашем коде newElement
не выходит за рамки. Что происходит, так это то, что вам дали указатель на данные вызывающего кода, и затем вызывающий код позволяет указанным объектам выйти из области видимости.
Когда я ответил на ваш предыдущий вопрос, вам нужно использовать «1016 * виртуальный клон идиома», чтобы сделать копию.
По сути, вы хотите вызывать new
с любым типом передаваемой, наведенной, таким образом, чтобы была сделана копия. Чтобы убедиться, что «копия сделана», естественным будет использовать конструктор копирования с new
, то есть new whatever(my_existing_whatever_instance)
. Но в C ++ конструкторы не могут быть virtual
, поэтому мы не можем фактически поместить желаемый тип в вызов new
. Вместо этого мы должны подделать его с помощью функции-члена. Поскольку функции-члены могут быть virtual
, правильная версия clone
ищется в фактической наведенной вещи, которая реализована для вызова new
с использованием своего собственного типа и вызова своей собственной копии конструктор. Ссылка содержит подробную информацию.