0

当您不必处理指针时,将结构复制/移动到另一个结构非常容易。
不过,就我而言,我必须处理指针和访问权限。

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,但问题总是存在。
如果您需要其他详细信息,请告诉我。

编辑:@Mike Woolf 你给了我一个想法。由于基类是一个抽象类,我什至可以将这些结构公开,因为用户无法实例化它。不过感谢您的回答。

4

1 回答 1

1

在这种情况下,我会编写自己的复制功能。可能是这样的

void structCopy(struct* dest, const struct* src);

在此函数内部,使用 memcpy() 复制除指针之外的所有内容。

当我在制作多人游戏时,我不得不做这样的事情——像这样复制指针。在这种模式中,通常假设这是一个能够准确理解它必须做什么的函数——也就是说,structCopy() 是专门为这个特定的结构设计的。所以它知道对象内部有一个 sockaddr 。

所以真的,只需在这个函数内部硬编码你想要如何处理它。你想让它在另一端创建一个新的 sockaddr 吗?然后让复制功能做到这一点。或任何工作。

TL;DR - 为您的结构创建一个特殊的复制函数,该函数知道结构内部的内容并让它根据您的规范处理 sockaddr。通过使其成为类(或朋友函数)的一部分,您不会通过对函数进行硬编码而违反任何规则。

于 2014-02-01T16:45:26.033 回答