У меня есть интересный вопрос об указателях C ++.
Вы, вероятно, подумаете, что я должен изменить свой дизайн и избегать
делать то, что я делаю, и вы, вероятно, правы.
Но давайте предположим, что у меня есть веская причина сделать это по-своему.
Так что это ситуация. У меня есть класс C ++ TestClass, и у меня есть указатель A этого типа:
TestClass* A = new TestClass();
Среди прочего TestClass имеет эту функцию:
void TestClass::Foo(){
TestClass* B = new TestClass();
...
}
Эта функция создает объект B того же типа и заполняет его некоторыми данными.
В конце этой функции я хочу, чтобы указатель A указывал на объект B.
В любом месте за пределами этой функции это будет выглядеть так: A=B
; внутри этой функции
это может выглядеть как this = B
Но, как вы знаете, вы не можете переназначить указатель «this».
Возможные решения:
Копировать память:
memcpy(this, B, sizeof(TestClass));
Этот метод работает правильно. Функция копирует каждый бит объекта B в объект A.
Проблема: если TestClass - большой объект (и он есть), это создает значительные потери производительности для нескольких вызовов Foo.
Вернуть указатель B из функции и сделать что-то вроде этого
Temp = A;
A=A->Foo();
freeMemory(Temp);
Но этот код выглядит глупо, и это делает функцию Foo очень сложной для использования.
Итак, вопрос в том, как я могу сделать this = B
внутри функции-члена, не копируя целые объекты?