在 C++ 中通过引用将地址传递给类并从该类传递到其"child-class"

Passing an address to a class and from there to its "child-class" by reference in C++

本文关键字:child-class C++ 引用 地址 址传      更新时间:2023-10-16

"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;
}

这是一个很好的做法(因为我是一种使用对一个解引用指针的引用)?还是真的很可怕?我只是想避免使用指针。(尽管我不得不在开头使用"*指针"。)

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

如果您必须这样做是可以的,但是请考虑在函数参数中使用常数引用N(const int& pPointer)。这意味着你不能改变指针指向别的东西,但是你仍然可以通过解引用来修改底层变量的值。

如果将引用作为数据成员存储在类中,也要注意。如果调用者中的对象(在你的例子中是int)超出了作用域,你可能会得到一个"悬空引用"。