Подтвердить что ты не робот

Как вы можете присвоить значение указателю 'this' в С++

В функции, как вам назначить this новое значение?

4b9b3361

Ответ 1

Вы не можете.

9.3.2 Этот указатель [class.this]

1 В теле нестатической (9.3) функции-члена ключевое слово this является выражением prvalue, значение которого это адрес объекта, для которого вызывается функция. [...] (выделение и ссылка).

Вы можете изменить объект this, который равен *this. Например:

struct X
{
   int x;
   void foo()
   {
     this->x =3;
   }
};

Метод изменяет сам объект, но что-то вроде this = new X является незаконным.

Ответ 2

Вы можете назначить объект this точкам по адресу:

*this = XY;

Но вы не можете назначить прямое значение this:

this = &XY;   // Error: Expression is not assignable

Ответ 3

Давным-давно, прежде чем был опубликован первый стандарт С++, некоторые реализации компилятора позволили вам написать следующий код внутри конструктора:

this = malloc(sizeof(MyClass)); // <<== No longer allowed

Этот метод служил единственным способом управления распределением класса объектов. Эта практика была запрещена стандартом, потому что перегрузка operator new решила проблему, которая использовалась при назначении this.

Ответ 4

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

Ответ 5

Вы не можете присвоить значение указателю this. Если вы попытаетесь присвоить значение this somthing like this = &a, это приведет к нелегальному выражению

Ответ 6

Вы не можете. "this" является скрытым аргументом для каждой функции-члена класса, а его тип для объекта класса X - это X * const. Это явно означает, что вы не можете назначить новую vale для "this", поскольку она определена как const. Однако вы можете изменить значение, на которое это указывает. Подробнее см. http://www.geeksforgeeks.org/this-pointer-in-c/.