当内存分配稍后时,是否可以自动更新结构内的指针值?请查看代码。
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++:
struct S
{
void*& ptr; // ptr is now a reference to a pointer. Drawback: Has to be initialized.
};
可以按如下方式使用:
S s = {p};
但是作为成员的推荐是一个有争议的话题。在这种情况下,另一种间接方式可能更好:
C:
也许您的代码片段中的 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这就是您正在寻找的。p>
关于c++ - 自动更新结构体中的指针值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23968813/