通过网络发送指针被认为是危险的?

时间:2016-02-20 07:30:14

标签: c++ pointers network-programming

我在std::vector中存储了一组对象,并且我有许多对这些对象起作用的远程过程调用函数。

class Particle{...};
std::vector<Particle> particleContainer;

void calledByRPCLibrary(Particle* index){
[Do stuff to *index]
}

目前,我通过网络发送容器中的对象指针作为索引,避免了类包含索引值和搜索功能的需要。

远程程序不对指针做任何事情 - 它们只将它们作为远程函数调用的参数回显。

这是否安全 - 一般情况下,std :: vector可能会移动东西吗?

2 个答案:

答案 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。