Внутренние компоненты C++: возиться с указателем this
У меня есть несколько вопросов о внутренней работе C++. Например, я знаю, что каждая функция-член класса имеет скрытый скрытый параметр, который является указателем this (во многом аналогично тому, как это делает Python):
class Foo
{
Foo(const Foo& other);
};
// ... is actually...
class Foo
{
Foo(Foo* this, const Foo& other);
};
Неужели я ошибаюсь, если предположим, что действительность функции напрямую не зависит от ее достоверности (поскольку это просто еще один параметр)? Я имею в виду, конечно, если вы попытаетесь получить доступ к элементу this-указателя, он будет действительным, но в противном случае функция будет продолжена, если он будет удален, верно?
Например, что если бы я испортил указатель this и сделал что-то вроде того, что вы видите ниже? Это неопределенное поведение, или оно определено крайне обескураженным? (Я спрашиваю из чистого любопытства.)
Foo:Foo(const Foo& other)
{
delete this;
this = &other;
}
2 ответа
Вы не можете назначить this
- это типа Foo * const
, Вы можете delete this;
в определенных обстоятельствах, но это редко хорошая идея.
this
определяется как,
Foo(Foo* const this, ...);
Отбрасывая const
Несс не возможен для this
(особый случай). Компилятор выдаст ошибки за то же самое. Я задал похожий вопрос.