Векторы переданы в качестве аргументов конструкции - PullRequest
0 голосов
/ 28 мая 2019

Если у меня есть класс, подобный следующему:

namespace Matrix {
  class Matrix; 
  class Vector {
   public:
    //i want to create a vector the same size as contents with the same values
    Vector(const std::vector<ValueType>& contents);
   private:
   std::vector<ValueType> contents;
}

Когда содержимое передается через конструктор, автоматически ли оно копируется в вектор, называемый содержимым, которое я определил в классе?Или я должен что-то сделать в определении конструктора, чтобы добиться этого?

1 Ответ

0 голосов
/ 28 мая 2019

Нет, вы не получаете автоматическое копирование только из-за того, что у вашего конструктора есть аргумент. Вы могли бы написать:

Vector(const std::vector<ValueType>& contents_) : contents{contents_} { };

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

  1. Если вы передадите r-значение конструктору (например, временный вектор, полученный из какой-либо функции), const & сделает дополнительную копию.
  2. Почему вы хотите инициализировать ваши данные только из std :: vector? Вы должны быть готовы принять хотя бы std :: span или, возможно, шаблон для контейнера или пары итераторов.
  3. На самом деле, я бы рассмотрел шаблонирование всего вашего внутреннего векторного класса в базовом контейнере.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...