在 C++ 中通过引用将地址传递给类并从该类传递到其"child-class"
Passing an address to a class and from there to its "child-class" by reference in C++
"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 = ∬
std::cout << "Address: " << pointer <<" n";
M m(*pointer);
return 0;
}
这是一个很好的做法(因为我是一种使用对一个解引用指针的引用)?还是真的很可怕?我只是想避免使用指针。(尽管我不得不在开头使用"*指针"。)
通过引用传递而不是通过指针传递来稍后使用对象是完全可以的,只要你知道你正在使用的指针是有效的。这允许您跳过nullptr
检查,因为引用不能为空。
但是,如果存储引用,则不能将被引用的对象替换为另一个对象。但是你可以用指针来做。
稍后,您可以获取被引用对象的地址,但是您真的认为您需要这样做吗?因为你可以用引用代替
如果您必须这样做是可以的,但是请考虑在函数参数中使用常数引用N(const int& pPointer)
。这意味着你不能改变指针指向别的东西,但是你仍然可以通过解引用来修改底层变量的值。
如果将引用作为数据成员存储在类中,也要注意。如果调用者中的对象(在你的例子中是int)超出了作用域,你可能会得到一个"悬空引用"。
相关文章:
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- "Undefined class"作为is_base_of的论据
- 如何将class.cpp和class.hpp编译为一个.o文件
- 更改"child's parent's style sheet"时如何将孩子的样式表重置为 Qt 默认样式表?
- '{'标记之前的预期类名,然后在预声明时无效使用不完整的类型'class class_name'
- 如何使用"derived input class"创建派生类?
- 错误:"Left of getValue must have class/struct/union"
- ' class a : b ' 和 ' class a : public b ' 之间的继承类不同
- Pybind11 Class Definition
- 在C++中使用没有合作伙伴Class/Cpp文件的头文件是否实用
- C2011 'CMemDC':Visual Studio 2019中的'class'类型重新定义
- TypeError: [c++ addon class] 不是构造函数
- C++ class template
- 当初始值设定项是基类名时'initializer does not name a non-static data member or base class'错误
- Clearing Class Foo with new(pFoo) Foo()
- 将"pointer to a child class"追加到"pointer to the parent class"向量中
- 如何在C++实现继承并解决错误"parent class is not accessible base of child class"?
- 在 C++ 中通过引用将地址传递给类并从该类传递到其"child-class"