Копирование вектора из стека в кучу

У меня есть метод, который принимает константный вектор ссылки. Я хочу поместить изменяемую версию вектора в кучу и вернуть это

Это компилируется, но я не уверен, что он на самом деле делает то, что я думаю. Я не уверен, что мне повезло с памятью здесь:

vector<Type> *vect = new vector<Type>;
*vect = vectReference;

2

Решение

Все в порядке, вы сделали динамически распределены vector копия. Но то же самое можно сделать более коротким способом, используя конструктор копирования вместо конструктора по умолчанию и оператора присваивания:

vector<Type> *vect = new vector<Type>(vectReference);

Также хотел бы предложить использовать умный указатель вместо сырого: std::unique_ptr или же std::shared_ptr — в зависимости от вашей семантики кода.

2

Другие решения

Как я вас понимаю, вы все делаете правильно. Во второй строке вы копируете вектор из vectReference в vect, размещенный в куче.

1

Этот код работает правильно.

Однако вам нужно убедиться, что «vect» выделяет пространство, которое должно быть освобождено позже, поэтому вы, вероятно, захотите использовать std :: auto_ptr, чтобы гарантировать, что объект уничтожается:

std::auto_ptr<std::vector<Type> > vect(new std::vector<Type>);
*vect = vectReference;
1

Это будет выполнять именно то, что вы хотите. Вы можете даже сократить это:

vector<Type> *vect = new vector<Type>(vectReference);

вызывать конструктор копирования, а не оператор присваивания.

1
По вопросам рекламы [email protected]