【问题标题】:Update pointer value in struct automatically自动更新结构中的指针值
【发布时间】:2014-07-21 01:15:54
【问题描述】:

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

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;
}

【问题讨论】:

  • 如果你在 C++ 中,你可以使用对指针的引用。如果你在 C 语言中,你可以使用指针到指针。
  • 你可以改变动作的顺序,或者代码的哪一部分负责分配。或者,您可以添加另一层间接。但与往常一样,查看真正的问题 是个好主意,而不是针对该问题的想象的技术解决方案。这意味着,添加另一个间接层,这是有代价的,可能不是一个好主意。不过,这是一个技术解决方案。

标签: c++ c


【解决方案1】:

你可以简单地持有一个间接:

C++:

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

可以这样使用:

S s = {p};

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

C:

也许你的 sn-p 中的 new 只是为了解释的目的,而你使用 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 就是你要找的东西。

【讨论】:

    猜你喜欢
    • 2021-03-13
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多