Внутренние компоненты C ++: возиться с указателем this - PullRequest
0 голосов
/ 19 апреля 2011

У меня есть несколько вопросов о внутренней работе 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 ]

2 голосов
/ 19 апреля 2011

Вы не можете присвоить this - это тип Foo * const. Вы можете delete this; при определенных обстоятельствах, но это редко хорошая идея.

1 голос
/ 19 апреля 2011

this определяется как

Foo(Foo* const this, ...);

Отмена const ness не невозможна для this (особый случай).Компилятор выдаст ошибки за то же самое.Я задал аналогичный вопрос .

...