当最终地址未知时,如何初始化指针指针?

时间:2013-09-19 14:28:13

标签: c++ pointers

在这个例子中,我想将指针指向未来,尚未分配someObject的函数。 (请不要问为什么。)

int main(void) {
    functionThatNeedsSomeObject();

    SomeClass someObject(0);
}

我正在尝试使用指向指针的指针。这是我的尝试:

int main(void) {
    SomeClass** ppSomeObject;
    functionThatNeedsSomeObject( ppSomeObject);

    SomeClass someObject(0);
    *ppSomeObject = &someObject;
}

但在我的代码中,ppSomeObject在传递时未初始化。当然第二层指针不能指向对象,但是如何在创建someObject时将第一层指针指向稍后可以更改的位置?

我应该这样做吗?即使它有效,创建一个中间指针也是不必要的。

SomeClass* pSomeObject = 0;
SomeClass** ppSomeObject = &pSomeObject

2 个答案:

答案 0 :(得分:1)

您可以通过引用传递指针:

void functionThatNeedsSomeObject(SomeObject*& rpObject)
{
    // do stuff
}

int main()
{
    SomeObject* pSomeObject = NULL;
    functionThatNeedsSomeObject(pSomeObject);
    SomeObject someObject(0);
    pSomeObject = &someObject;
    // NOTE:  when the function ends, someObject is destroyed, so the pointer is dangling
}

答案 1 :(得分:0)

如果要将引用或指针传递给指针并稍后更改它,则传递的内容必须具有内存位置。

您可以执行SomeClass** ppSomeObject = new SomeClass*;之类的操作,稍后删除指针(最后)。 话虽如此,通常有更好的方法来做事并正确使用RAII