2017-01-02 10 views
0

私のタイトルが誤解を招くことはないが、私は正しいタイトルがわからないものを尋ねたい。非静的メンバーの静的メンバー関数

最初は、非静的メンバーを静的関数を介して呼び出すことができるかどうかを尋ねていません。私は、非静的メンバーがオブジェクトのインスタンスに属し、静的関数がオブジェクト自体に属していることを知っています。私が知りたいことは違うものです。

RAMの消費量が多い私の修士論文でプログラムを作成しました。なぜ私はいつも参照を使用しているし、本当に必要な場合は、変数とオブジェクトをコピーするだけなので、私は不思議に思っていました。しかし、メモリの割り当てをチェックすると、私のオブジェクトがそれぞれ250kBのメモリを占有していることに気がつきました。実際にインスタンス化する必要があるインスタンスをインスタンス化するだけで、その量のメモリを削減したいと思います。

myオブジェクトのインスタンスを作成すると、オブジェクト内の各メンバー関数のインスタンスも作成されます。私の質問は今です:

関数は変更されていませんが値はそうですので、関数を静的なものとして宣言することができますので、常にコピーする必要はありませんが、インスタンスの静的メンバー変数

私が求めていることは明らかです。

私の考えを強調するために、少し例を挙げたいと思います。

のは、私は二回getMyVariable(myType &)関数を呼び出す次のコード

class myObject(){ 
    myType myVariable; 
    void getMyVariable(myType &typRef){ 
     typRef = this->myVariable; 
    } 
} 
int main(){ 
    myObject o1; 
    myObject o2; 

    myType t1; 
    myType t2; 

    o1.getMyVariable(t1); 
    o2.getMyVariable(t2); 

    std::cout << "Variable of object 1 is " << t1 << std::endl; 
    std::cout << "Variable of object 2 is " << t2 << std::endl; 
} 

があるとしましょう。しかし、すべてのインスタンスで同じことを行うので、一度保管するだけで十分です。変化する唯一の事は私が戻ってくる変数です。

静的な方法で関数を格納できるが、インスタンスの非静的メンバーをその関数に交換可能な値として動的に保持するキーワードがC++にあります。

私は今何を探しているのですか?

+1

基本的な誤解があなたを迷子に導いたように見えます。メンバー変数のみがオブジェクトに格納されます。メンバー変数を表示します。 – molbdnilo

+2

クラス、オブジェクト、インスタンスについても混乱しているようです。クラスは型です。オブジェクトは型のインスタンスです。 – molbdnilo

+0

ああ、私は少し紛らわしいようですが、私はこの用語に100%自信がないからです。私は機能がデフォルトごとに1回しか存在しないことを知りませんでした。これは良いことですから、心配する必要はありません。ありがとうございました。デバッグモードでのメモリ割り当てを確認すると、多くの空のメモリがメンバー変数の間に格納されていることがわかりました。どんな考え? – Bullzeye231

答えて

4

myオブジェクトのインスタンスを作成して、自分のオブジェクト内の各メンバー関数のインスタンスも作成します。

いいえ、そうではありません。関数は、コード専用のメモリの一部に一度だけ存在し、どのような方法でも個々のオブジェクトに関連付けられません。

C++には、静的な方法で関数を格納することができますが、インスタンスの非静的メンバーをその関数に交換可能な値として動的に保持するキーワードがあります。

これはC++でキーワードがありません。これはデフォルトで発生するため(これは回避できません)

オブジェクトが大きすぎる場合は、データが大量に保存されるためです。コードはであり、オブジェクトのデータレイアウトの一部ではないであり、ではなく、のサイズに影響します。

関連する問題