1

“pointer”保存“Int”的地址。我想通过引用将该地址传递给给定的类:

class N {
public:
    N(int &pPointer){   
        std::cout << "Address: " << &(pPointer) <<" \n";
    }
};
class M {
public:
    M(int &pPointer):n(pPointer) {              
       std::cout << "Address: " << &pPointer <<" \n";
    }   
    private:
     N n;
};

int main () {
    int Int = 5;
    int *pointer = &Int;    
    std::cout << "Address: " << pointer <<" \n";
    M m(*pointer);  
     return 0;
}

这是一个好习惯吗(因为我有点使用对取消引用指针的引用)?还是绝对可怕?我只是想在这里避免指针。(虽然我一开始就被迫使用“*pointer”。)

4

2 回答 2

1

通过引用传递而不是通过指针传递以稍后使用 abject 是完全可以的,因为您知道您使用的指针是有效的。这允许您跳过nullptr检查,因为引用不能为空。
但是,如果您存储一个引用,您将无法将被引用的对象替换为另一个对象。但是你可以用指针来做到这一点。
稍后,您可以获取被引用对象的地址,但您真的认为您要这样做吗?因为您可以改用参考

于 2013-05-17T08:49:24.473 回答
0

如果必须的话也没关系,但请考虑N(const int& pPointer)在函数参数中使用常量引用。这意味着您不能将指针更改为指向其他内容,但您仍然可以通过取消引用来修改基础变量值。

如果将引用作为数据成员存储在类中,也要小心。如果调用者中的对象(在您的情况下为 int )超出范围,您最终可能会得到一个“悬空引用”。

于 2013-05-17T08:14:57.057 回答