0

C++の内部動作についていくつか質問があります。たとえば、クラスのすべてのメンバー関数には、暗黙の非表示パラメーターがあります。これは、thisポインターです(Pythonとほぼ同じです)。

class Foo 
{
    Foo(const Foo& other);
};

// ... is actually...

class Foo
{
    Foo(Foo* this, const Foo& other);
};

関数の有効性がこれの有効性に直接依存していないと仮定するのは間違っていますか(これは単なる別のパラメーターであるため)?つまり、確かに、thisポインターのメンバーにアクセスしようとすると、有効である方がよいのですが、それ以外の場合は、これが削除されても関数は続行されますよね?

たとえば、このポインタを台無しにして、下に表示されているようなことをした場合はどうなりますか?これは未定義の動作ですか、それとも非常に落胆した動作によって定義されていますか?(私は純粋な好奇心から求めています。)

Foo:Foo(const Foo& other)
{
    delete this;
    this = &other;
}
4

2 に答える 2

2

に割り当てることはできませんthis-タイプFoo * constです。特定の状況では可能 ですがdelete this;、それが良い考えになることはめったにありません。

于 2011-04-19T10:11:24.653 に答える
1

thisと定義されている、

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

(特殊なケース)の場合、constネスをキャストすることはできません。thisコンパイラは同じエラーを出します。私は同様の質問をしました。

于 2011-04-19T10:19:55.400 に答える