我在std::vector
中存储了一组对象,并且我有许多对这些对象起作用的远程过程调用函数。
class Particle{...};
std::vector<Particle> particleContainer;
void calledByRPCLibrary(Particle* index){
[Do stuff to *index]
}
目前,我通过网络发送容器中的对象指针作为索引,避免了类包含索引值和搜索功能的需要。
远程程序不对指针做任何事情 - 它们只将它们作为远程函数调用的参数回显。
这是否安全 - 一般情况下,std :: vector可能会移动东西吗?
答案 0 :(得分:1)
向std::vector
发送指向远程过程调用的指针并不安全,因为如果向量发生变化,那些指针将变为无效。当您将新元素推入std::vector
并且您没有足够的容量时,该向量会将其大小加倍,并将其所有内容复制到不同的内存位置。旧指针无效。
答案 1 :(得分:0)
这不是您问题的直接答案,但我觉得有一个隐含的后续问题&#39;如何安全地在网络中序列化std::vector
? `有许多可能的答案,包括 Google Protocol Buffers 和 boost.serialization
Google协议缓冲区 - https://developers.google.com/protocol-buffers/
boost.serialization - http://www.boost.org/doc/libs/1_60_0/libs/serialization/doc/index.html
两者都有轻量级的线格式。协议缓冲区具有编程语言之间可移植性的附加优势。 Boost可以用于两个C ++应用程序之间的直接通信,特别是如果您已经在其他地方使用Boost。