16

これはおそらく簡単な質問ですが、私はそれに固執しています。オブジェクトをコンストラクターを介してObjectAからObjectB(ObjectAのメンバー)に渡そうとしています。ただし、値で渡すのではなく、const参照のみを渡し、その参照を無期限に格納したいと思います。問題は、どうしたらいいかわからないことです。

私はこれを次のようなポインタで動作させることができます:

class ClassB
{
private:
    int *ptrInternalX;
public:
    ClassB( int *tempX );
}

ClassB::ClassB( int *tempX )
{
    ptrInternalX = tempX
}

このようにして、オブジェクトが作成され、intへのポインターが渡され、そのポインターは後で使用できるようにクラス内に格納されます。

ただし、ポインタを使用すると、大きなオブジェクトを使用するときにメモリリークやその他の問題が心配になるため、 「定数参照」 (const&)を使用してこのようなことを試してみたいと思います。しかし、これはうまくいかないようです...

class ClassB
{
private:
    int &internalX;
public:
    ClassB( const int &tempX );
}

ClassB::ClassB( const int &tempX )
{
    internalX = tempX
}

参照は本質的に既存の変数(同じメモリアドレスを参照する別の名前)の「エイリアス」であり、既存の変数を使用してすぐに初期化する必要があることを私は知っています。したがって、これは私のプログラムにエラーを作成します!

これも可能ですか?または、このようなことを行うためのより良い/より明確な方法はありますか?一定の参照を使用したい理由は、データを偶発的な変更やメモリリークから保護しながら、大きなオブジェクトではなく参照だけを渡す速度です...簡単で簡単な方法があると確信していますこれを行いますが、私はconst参照の受け渡しにあまり精通していません。

4

1 に答える 1

20
class    ClassB
{
    private:
        const int&    internalX;
    public:
        ClassB(const int& tempX);
}

ClassB::ClassB(const int& tempX):
     internalX(tempX)
{
}

あなたが言ったように、areferenceはすぐに初期化されなければなりません。したがって、referenceクラスメンバーにしたい場合は、コンストラクターの初期化リストを使用して設定する必要があります。

(この短い説明は、あなたが今遭遇した状況に特に集中しているので、あなたにとって物事をより明確にするかもしれません)

幸運を

于 2013-01-05T07:16:58.637 に答える