Установка экземпляра объекта для другого изнутри, используя this = new Foo ()? - PullRequest
2 голосов
/ 20 марта 2011

Я работаю с хеш-таблицей и, чтобы перефразировать ее, я просто помещаю все значения в новую хеш-таблицу, а затем задаю исполняющий экземпляр этой новой хеш-таблице.

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

Foo *new_foo = new Foo();
...
delete this;
this = new_foo;

Я знаю, что проблема не в строке удаления, поскольку она не работает даже без этого.Это ошибка: error: lvalue требуется в качестве левого операнда присваивания.

Кроме того, как дополнительный вопрос, каков наилучший / стандартный способ копирования выделенных массивов?*a = *b?Я новичок в C ++, очевидно, и это было бы полезно знать, но не обязательно.

Ответы [ 3 ]

2 голосов
/ 20 марта 2011

Программа не может изменить this для указания на другой объект. this является постоянным указателем (т. Е. T* const).

this = new_foo; // incorrect.

Каков наилучший / стандартный способ копирования выделенных массивов?

Использование *a = *b; не копирует весь массив. Вы просто копируете значение с первого индекса b в первый индекс a. Вместо этого используйте std::copy.


int a[] = { 1,2,3,4,5 } ;
int b[5] ;

// To copy element of a to b -

std::copy( a, a+5, b ) ; // you need to include <algorithm> header.
2 голосов
/ 20 марта 2011

Вы не можете присвоить this.Попробуйте создать статический метод, который создает и возвращает новый экземпляр.

0 голосов
/ 20 марта 2011

Я думаю, что сообщение об ошибке говорит вам, что вам нужно знать.Ключевое слово this не является lvalue, и поэтому его нельзя назначить.Почему вы не можете просто сделать это?:

Foo *old_foo = ...
Foo *new_foo = new Foo();
delete old_foo;
old_foo = new_foo;

Или, если это действительно хеш-таблица, создайте «пустой» метод, который обходит элементы и удаляет их все, а не удаляет сам.

...