問題タブ [this-pointer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - ポインター「this」のアドレスが、メンバー関数呼び出しへのポインター内で予期せず変更されました
メンバー関数呼び出しへのポインターに問題があります。関数ポインター呼び出しの外側のポインター「this」のアドレスは、呼び出しの内側とは異なるため、クラス変数へのすべてのアクセスは間違った値になります。
ここにコードを含めます。
そして、これは出力です:
したがって、ステートメント _a += 100; _a を変更しません。アドレス (&_a + 4) に変更を加えました。
これを解決する手がかりがありません。修正を手伝ってください。
c++ - 「this」ポインターでのポインター演算
C++ の "this" ポインターでポインター演算を実行するための正当な、および/または興味深い使用法は何ですか?
SEがこの質問の長さに満足するようにするために、関連するコードをいくつか含めます。
c++ - このポインター調整は、非ポリモーフィック継承で発生しますか?
非ポリモーフィック継承にはこのポインター調整が必要ですか? 私が見たすべてのケースで、このポインタ調整は、使用された例がキーワードによるポリモーフィック継承を含むことを議論しましたvirtual
。
非ポリモーフィックな継承がこのポインタ調整を必要とするかどうかは私には明らかではありません。
非常に単純な例は次のとおりです。
次の関数呼び出しでは、このポインターの調整が必要ですか?
この場合、データ メンバーがアクセスされないため、 this ポインターの調整は明らかに不要です。一方、継承された関数がデータ メンバーにアクセスする場合は、このポインターの調整が適切な場合があります。一方、メンバー関数がインライン化されていない場合は、このポインターの調整がどうしても必要なようです。
これは実装の詳細であり、C++ 標準の一部ではないことは理解していますが、これは実際のコンパイラがどのように動作するかについての問題です。これが、すべてのコンパイラが同じ一般的な戦略に従う vtables のようなケースなのか、それとも非常にコンパイラに依存する質問をしたのかはわかりません。コンパイラに大きく依存している場合は、それ自体で十分な答えになります。または、必要に応じて、gcc または clang に焦点を当てることができます。
c++ - 引数のないメンバー関数が C++ のオブジェクトによって呼び出されるとどうなるか
のメンバー関数がclass X
あり、それがX f()
のオブジェクトを返し、class X
引数を取らないとします。
したがって、 のオブジェクトによって呼び出された場合、 がオブジェクトであるとしclass X
ますX obj
。
したがって、 を呼び出すとobj.f()
、C++ の規則に従って、秘密の引数が関数に渡されf()
ます。this
これは、 を呼び出すオブジェクトのアドレスを含むオブジェクトのポインターですf()
。
したがって、私の混乱は、C++ によってどのように管理されるかです。これは、秘密の引数が毎回渡されるため、C++ では引数をまったく持たないメンバー関数を持つことができないことを意味するためです。
引数 say を持つ関数の場合、func(int a)
実際には 2 つの引数を取ることができる関数であり、引数の 1 つは秘密の引数 (this
ポインター) であり、もう 1 つはint a
です。
では、引数をまったく持たない C++ のメンバー関数が厳密に必要な場合 (割り込みサービス ルーチンの場合のように)、どうすればよいでしょうか?
私が間違っているか、コンセプトが欠けているか教えてください。
python - ctypes コールバック関数が Python をクラッシュさせる - 「this」ポインタ パラメータ?
ctypes を使用して Python から C dll を呼び出していますが、IBSU_RegisterCallbacks
以下に定義されている関数に正しいパラメーターを渡すのに問題があります。
最終パラメータは次のように説明されています。
実際の C++ の例では、次のように関数を呼び出します。
これまでのところ、Python には以下のコードがあります (関連するセクションのみを示しています)。これは、イベントがトリガーされて出力された直後に Python をクラッシュさせます (トレースバックなし) callback run!
。
コードの最後の行this
だけでなく、送信できる Python クラスと同等のものは何ですか? c_void_p()
このパラメーターを間違って取得すると、Python コールバック関数が起動した後でもクラッシュする可能性がありますか?
c++11 - 「this」を右辺値として返す
次のコードは、予想どおり、コンパイルされません
クラスAを
プログラムをコンパイルします。ただし、std::move で右辺値を返すことは、ダングリング参照を返すか、コンパイラが特定の最適化を実行できないようにするため、通常はお勧めできません。
説明されているケースは、「右辺値で返さない」という経験則からの数少ない例外の1つですか、それとも問題を別の方法で解決する必要がありますか?
まことにありがとうございます!