Редактировать: Я знаю, после комментариев, что этот ответ не помогает OP, однако сначала это было неясно. Таким образом, я хотел бы оставить его, если кто-нибудь когда-либо приходил сюда и хотел, чтобы копировать фактические объекты. Просто ради полноты.
Если вы хотите сделать копии указателей на Proc
, то объекты идут для ответа сашей.
Однако, если вы хотите сделать копии реальных объектов, хранящихся в наборе, вам необходимо их явно скопировать.
std::list<Proc*> firstLevel;
for(std::set<Processor*>::iterator it = endProcessors.begin(); it != endProcessors.end(); ++it){
firstLevel.push_back(new Proc(**it)); //1
}
[1] разыменования итератора, разыменования указателя, чтобы получить реальный объект, а затем создать новый объект Proc
от него, и нажать на указатель из нового на список.
Я вижу уже downvotes, так что, возможно, я попытаюсь разработать.
Если вы копируете только ссылки - указатели. Затем изменение элементов в списке будет отражено на элементах набора, и наоборот, когда они хранят Proc*
. Если намерение заключается в копировании фактических Proc
объектов. Выложенный код делает это.
Редактировать: Чтобы отразить ваш комментарий.
Конечно, важно помнить, что когда вы храните указатели, когда контейнер уничтожается, его вызывал только его элемент get d'tors. В этом случае это будет Proc*
. Я имею в виду, что только указатели будут потеряны. Если мы создаем явные копии элементов при создании вектора, конечно, нам нужно явно перебрать и использовать delete
для каждого элемента, чтобы правильно освободить память.Альтернативой может быть использование интеллектуальных указателей, но исходный пример этого не сделал, поэтому я тоже оставил его.
Вам был показан лучший способ сделать это, но только для полноты вы заменили бы '????' на '* it'. 'it' трактуется несколько как указатель, поэтому' * '" разделяет его и получает значение, которое затем будет помещено в 'list'. – BoBTFish