复制/移动结构到另一个结构

Copying/moving a struct into another one

本文关键字:结构 另一个 移动 复制      更新时间:2023-10-16

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

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您给了我一个主意。由于基类是抽象的,因此我什至可以将这些结构公开,因为用户无法将其放置。但是,感谢您的答案。

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

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

在此功能中,使用memcpy()复制除指针以外的所有内容。

当我制作多人游戏时,我必须做这样的事情 - 复制这样的指针。在这种模式下,通常假设这是一个函数,可以准确地理解它必须做的事情 - 也就是说,structcopy()是专门为该特定结构设计的。因此,它知道对象内有一个sockaddr。

真的,只需在此功能的内部进行硬码如何处理。您是否希望它在另一端创建一个新的sockaddr?然后让复制功能执行此操作。或任何有效的工作。

tl; dr-为您的结构创建一个特殊的复制功能,该功能知道结构内部的内容,并根据您的规格来处理sockaddr。通过使其成为类的一部分(或朋友函数),您不会通过硬编码来违反任何规则。

相关文章: