指向具有指针成员的对象的指针
Pointer to an object that has a pointer member
指向指针的指针在 C++ 中合法吗?我遇到了这个SO问题:
指针到指针到指针但是答案尚不清楚它是否合法的c ++。假设我有:
class A{
public:
void foo(){
/* ect */
}
};
class B{
public:
A* a;
/* ect */
};
void Some_Func() {
B *b;
// besides this looking ugly, is it legal c++?
b->a->foo();
};
这行b->a->foo()
可以写吗?有没有更好的方法来表示这个表达式?
这是完全有效的。但是您使用的术语"指针指向指针"是错误的。
该术语表示像**P
这样的双指针,该指针保存另一个指针的地址。
但您的情况是指针(类 A)是一个类的成员,其指针(类 B 的)是由您在some_func
中创建
这是合法的,但在您的示例中,您的程序将崩溃(如果您可以编译它,因为您的成员是私有的),因为您没有创建 B 的实例
void Some_Func() {
B *b; // uninitialized B ptr should be B* b = new B;
// legal
b->a->foo();
};
尽管您可能希望像现在一样重新考虑直接访问变量,而是让 getter/setter 访问私有成员变量。
非法,"a"是私有的。"foo"也是如此。
如果更正为"公共",那么它们就是合法结构。
从您的代码中很难找到"更好"的方法。但是 您可以修改代码以使代码看起来更清晰:
class A{
public:
void foo(){ cout << "Work";}
};
class B{
private:
A *a;
public:
A& getA(){
return *a;
}
};
void SomeFunction()
{
B *b = new B();
B& bRef = *b;
bRef.getA().foo(); //better looking code?
delete b;
}
是的,但是您必须像**P
一样使用指针到指针。
实际上,如果我们想访问一个持有另一个指针的指针,那么我们可以这样做。这在 c++ 中是允许的,但请记住,只有在您分配了指向pointer p
的指针的情况下
相关文章:
- 如果基类包含双指针成员,则派生类的构造函数
- C++正确的指针成员初始化
- 是否可以使用智能指针成员设置具有另一个结构的结构?
- 为什么 operator() 处的指针成员不起作用?
- 更改队列指针成员的值需要在 C++ 中出现奇怪的错误
- 如何从另一个嵌套类中调用某个封闭类的嵌套类的函数指针成员的值?
- 结构对象的指针成员在传递给函数时被修改
- 参数的混合值,当我调用指针成员函数时
- 如何正确使用结构的共享指针成员?
- C++:私有类指针成员返回未定义的值
- 在函数中传递带有指针成员的结构是浅拷贝或深拷贝在 C 中
- 包含指针成员的嵌套结构
- 在 c++ 中,为什么 -> 被称为二进制中缀指针成员访问运算符?
- C++ 类指针成员行为奇怪(错误)
- 常量结构的指针成员
- 在类C++指针成员中
- 指针成员未在复制构造函数中初始化
- C++移动拥有指针成员的构造函数
- C++ 包含唯一指针成员变量的类的赋值运算符
- 如何使用 QPoint 指针成员对类进行排队和取消排队