2016-08-23 2 views
-1

これは基本的なものでなければならないと思いますが、それを検索するには良いキーワードが見つかりません。より多くのオブジェクトをインスタンス化すると、メンバー関数のインスタンス化が増えますか?

同じメンバ関数がますますインスタンス化されると、関数をマネージャクラスに移動する方がメモリ的には良いでしょうか?

+0

いいえ非現実的なメンバ関数に 'this'パラメータを引数として渡しても目に見えない(つまりあなたに)共通の実装テクニックです - インスタンス化されたオブジェクトごとにコードは生成されません(いくつかのサンクは除外されます)。 – Niall

+0

@Niallより包括的なQ&Aへのリンクをありがとう。あなたは静的メンバー関数に何が起こるか知っていますか?彼らは静かに名前空間のグローバル関数として実装されるのですか? – Sgene9

+0

他の関数と同じようなものですが、目に見えない「this」は得られず、コンパイラはスコープ/可視性とアクセスを処理します。 – Niall

答えて

1

オブジェクトのインスタンス化は、オブジェクトの非静的データメンバーにのみ割り当てられ、メンバ関数には割り当てられません。

クラスのオブジェクトが2つある場合は、クラスのメンバ関数のコピーが2つあることを意味するのではなく、thisポインターが非静的メンバー関数に渡され、どのオブジェクトがメンバ関数を呼び出します。

+0

静的メンバー関数はどうなるのですか?彼らは静かに名前空間のグローバル関数として実装されるのですか? – Sgene9

+0

いいえ、クラスの静的メンバー関数、つまり 'MyClass :: aStaticMemberFunction()'にアクセスするには、クラスまたはオブジェクトの名前を使用する必要があります。ちょうど 'this'ポインタは静的メンバー関数に渡されません。 –

関連する問題