掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
C++のインスタンスメンバの関数ポインタ (ID:69287)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
>インスタンスを作るごとにメンバ変数、関数ともに作られると思って >いましたが、・・・(引用者省略) メンバ変数はインスタンス毎です。っつうか、 クラスのインスタンスとはクラス名で修飾された メンバ変数の集合体と思ったほうが吉。 メンバ関数については、そんな非効率なことはしませんよ。 全インスタンスで共用されるのが普通です。 しかし、もちろん例外があります。 >もしやメンバ関数は変数と違いどのインスタンスでも同じもの >で、インスタンス関数を呼び出すのは、それ自体が関数ポインタ呼び出し >のようなもの?なのでしょうか? 微妙(笑)。しかし、確実に言えるのは。 「staticでないクラスメンバ関数のポインタを利用してはならない」 ということです。なぜなら、staticでないクラスメンバ関数は 1.複数のインスタンスで共用されるように配置される場合。 2.利用された場所にインライン展開され、関数ですら無くなる場合。 3.しかも、上記2種が混載されちまう場合(笑)。 4.επιστημηさんの指摘のように、virtual つまり、「暫定的」に実装されていて、 実行時にならないとどこに行くやらさっぱり不明な場合。 等のケースがあり、コンパイラの判断に任されてしまいます。 従って、当然そのポインタなどに何の意味もありません。 もちろん実装方法とキーワードである程度コントロール することもできますが・・・。 一方staticなメンバ関数とは、 「全インスタンス及び、クラス外から共用することを強制されている」 もので、インスタンスが一つも存在していなくても関数の実体を持ち、 かつ、機能しなければなりません。 従って、その性質上、自クラスのstaticなメンバ(関数/変数)にしか、 アクセスできないわけです。当然ですね。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.