0

指向指针的指针在 C++ 中是否合法?我遇到了这个问题:Pointer to Pointer to Pointer

但答案尚不清楚它是否是合法的 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()可以写吗?有没有更好的方法来表示这个表达式?

4

4 回答 4

2

这是完全有效的。但是您使用的术语“指向指针的指针”是错误的。

该术语表示双指针**P,例如保存另一个指针地址的指针

但你的情况是指针(A类)是一个类的成员,其指针(B类)是由你创建的some_func

于 2012-10-18T05:57:06.797 回答
0

非法,“a”是私有的。“富”也是如此。

如果更正为“公共”,那么它们是合法的构造。

从您的代码中很难找到“更好”的方法。但是您可以修改代码以使代码看起来更清晰:

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;
}
于 2012-10-18T05:54:26.847 回答
0

这是合法的,但在您的示例中,您的程序将崩溃(如果您可以编译它,因为您的成员是私有的),因为您没有创建 B 的实例

void Some_Func() {
    B *b;  // uninitialized B ptr  should be   B* b = new B;

    // legal
    b->a->foo();
};

尽管您可能想重新考虑直接访问变量,而是使用 getter/setter 来访问私有成员变量。

于 2012-10-18T06:09:04.627 回答
-1

是的,但是你必须使用指向指针的指针,如**P.
实际上,如果我们想访问一个持有另一个指针的指针,那么我们可以这样做。这在 c++ 中是允许的,但请记住,只有在您分配了一个指针的情况下pointer p

于 2012-10-18T05:53:51.620 回答