自动更新struct中的指针值

时间:2014-05-31 10:17:18

标签: c++ c

当内存分配稍后时,是否可以自动更新结构内的指针值?请看代码。

struct S {void *ptr;};

void *p;
struct S ST= {p};

int main() {
    p = new int;
    void* b = ST.ptr; // b should be the same as p
    return 0;
}

1 个答案:

答案 0 :(得分:2)

你可以简单地保持间接:

C ++:

struct S
{
    void*&  ptr; // ptr is now a reference to a pointer. Drawback: Has to be initialized.
};

可以使用如下:

S s = {p};

但作为成员的引用是一个有争议的主题。在这种情况下,另一种间​​接方式可能更好:

C:

也许你的代码片段中的新内容仅用于解释目的,而且您使用C(代码中精心设计的类型说明符支持该参数)。

struct S
{
    void**  ptr; // ptr is now a pointer to a pointer. Drawback: Can be zero.
};

在这种情况下,您使用应引用的指针的地址初始化ptr

struct S s = {&p}; // I don't know about list-initialization in C, so i'll stick to this

随后,在取消引用它时,您将获得p的左值。

对于引用和指针之间的差异,请阅读this post

也不要忘记smart pointers。也许shared ownership是您正在寻找的。