Перемещение указателя объекта в векторе на другой вектор - PullRequest
1 голос
/ 29 сентября 2011

Сейчас у меня есть два вектора указателей на объекты

std::vector<Object*> vec1;
std::vector<Object*> vec2;

Допустим, у vec1 есть два объекта, а у vec2 нет ни одного.Как бы я переместил один из объектов в vec1 в vec2, не разрушая реальный объект?Итак, в конце оба вектора имеют размер 1, и у каждого есть указатель объекта.

Ответы [ 5 ]

2 голосов
/ 29 сентября 2011

Вы не уничтожите указанные данные (если они есть), пока не будет вызвано удаление. Вы можете сделать что-то так же просто, как ...

vec2.push_back(vec1[1]);
vec1.pop_back();
1 голос
/ 29 сентября 2011

Вы не уничтожаете объект.Возьми это из vec1 и push_back для vec2.Даже если вы возьмете это из обоих, вы не уничтожите объект.

0 голосов
/ 29 сентября 2011

Если векторы содержали объекты вместо указателей на объекты, и вы хотели переместить, а не скопировать, я думаю, вы могли бы использовать std :: move, который возвращает ссылку на значение, которая является подвижной, но не копируемой.

Существует SOвопрос о перемещении здесь: Что такое std :: move () и когда его следует использовать?

0 голосов
/ 29 сентября 2011

Как уже указывалось, я думаю, что вы можете получить большее понимание указателей в целом, прежде чем пытаться что-либо с ними делать. Вы не двигаетесь и ничего не делаете с самим объектом, вы двигаетесь / создаете новые указатели на этот объект.

0 голосов
/ 29 сентября 2011

Предположим, вы хотите переместить последние Object* с vec1 на vec2:

vec2.push_back(vec1[1]);
vec1.pop_back();  // not destroying Object*

Предположим, вы хотите переместить любой произвольный Object* в другой vector, затем получить его vector::iterator и скопировать его в пункт назначения. Тогда вы можете использовать vector::erase() на нем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...