Копировать конструктор, объекты, указатели - PullRequest
0 голосов
/ 17 апреля 2010

Допустим, у меня есть это:

SolutionSet(const SolutionSet &solutionSet) {
    this->capacity_ = solutionSet.capacity_;
    this->solutionsList_ = solutionSet.solutionsList_; // <--
}

А solutionsList_ является vector<SomeType*> vect*. Как правильно скопировать этот вектор?

Ответы [ 2 ]

0 голосов
/ 17 апреля 2010

vector<SomeType*> vect*. Как правильно скопировать этот вектор [...]?

Правильный способ - не иметь тупых указателей на динамически размещаемые объекты. Сделайте это умным указателем, и все станет намного проще.

0 голосов
/ 17 апреля 2010

То, что вы сейчас делаете, является «мелкой копией» списка ваших решений - оригинальный вектор содержит список ссылок на решения, а скопированный вектор будет содержать ссылки на те же решения. Это может быть именно то, что вам нужно здесь.

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

for (int i = 0; i < solutionsList.size(); i++) 
     solutionsList[i] = new SomeType(solutionsList[i]);

или используйте контейнеры-указатели, как уже предлагалось (хотя это может быть перебором).

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