В функции, как вам назначить this
новое значение?
Как вы можете присвоить значение указателю 'this' в С++
Ответ 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/.