2

次のリンクで、C++ のハンドル クラス イディオムについて読んでいます。と記されています

http://bytes.com/topic/c/insights/651599-handle-classes-smart-pointer

通常、ハンドル クラスには、オブジェクトの実装へのポインターが含まれます。実装されたオブジェクトではなく、Handle オブジェクトが使用されます。これにより、Handle オブジェクトに影響を与えることなく、実装されたオブジェクトを自由に変更できます。これはまさにポインターで起こることです。オブジェクトは変更されますが、ポインターのアドレスは変更されません。

私の質問は、「これはまさにポインターで起こることです。オブジェクトは変更されますが、ポインターのアドレスは変更されません。」例を挙げて説明していただければ幸いです。

お時間をいただきありがとうございます。

4

3 に答える 3

2

それはかなり簡単です、おそらく言葉遣いは混乱しています。

ポインターが指すオブジェクトは、プログラム内の他の何かによって変更できます。その (オブジェクトの) 値は、コード内の他の場所で変更できます。ただし、ポインターは指している場所を変更しません。それが理由です

Handle オブジェクトに影響を与えずに自由に変更できる実装されたオブジェクト。

例えば、

class Class {
    public: int data;
};

int main() {

    Class myClass;

    Class* myClassPointer = &myClass;

    Class* otherPointer = &myClass;
    otherPointer->data = 10;

    cout << myClassPointer->data << endl;  // value changed, pointer still works

    cin.get();
    return 0;

}
于 2013-08-05T14:50:37.970 に答える