当你不必处理指针时,将结构复制/移动到另一个结构中非常容易 在我的情况下,我要处理指针和访问权限。
protected:
addrinfo *hints, *result;
...
hints = new addrinfo;
...
getaddrinfo(0, port.c_str(), hints, &result); // result is protected - can't do that.
可以使用 memmove/memcpy
,但addrinfo
在其内部包含指向sockaddr
的指针。
我想用一个临时结构传递getaddrinfo
,然后将所有内容移到result
,但问题始终存在。
如果您需要其他详细信息,请告诉我。
答案 0 :(得分:1)
在这种情况下,我会编写自己的复制功能。它可能像
void structCopy(struct* dest, const struct* src);
在此函数内部,使用memcpy()复制除指针之外的所有内容。
当我制作多人游戏时,我不得不做这样的事情 - 像这样复制指针。在这种模式中,通常假设这是一个能够准确理解它必须做什么的函数 - 也就是说,structCopy()是专门为这个特定结构设计的。所以它意识到对象内部有一个sockaddr。
所以真的,只需要在这个函数内部硬编码你想要如何处理它。你想让它在另一端创建一个新的sockaddr吗?然后让复制功能这样做。或者无论如何。
TL; DR - 为您的结构创建一个特殊的复制函数,该函数知道结构中的内容并让它根据您的规范处理sockaddr。通过将其作为类(或朋友函数)的一部分,您不会通过对函数进行硬编码来破坏任何规则。