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 回答
0

我认为作者指的是这样一个事实,即句柄对象可以被复制和复制,并且引用对象的原始数据内容的更改可以通过每个副本访问 - 就像可以使用指针一样。

于 2013-08-05T14:41:37.250 回答
0

例如,在这段代码中:

int a = 5;
int *ap1 = &a;
int *ap2 = ap1;

ap1并且ap2是两个独立的对象,它们指向一个共同的对象。这些指针对象可以在不改变它们指向的对象的情况下被创建和销毁。

于 2013-08-05T14:41:58.433 回答