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

C++ 通过网络发送指针被认为是危险的?,c++,pointers,network-programming,C++,Pointers,Network Programming,我在std::vector中存储了一组对象,并且我有许多作用于这些对象的远程过程调用函数 class Particle{...}; std::vector<Particle> particleContainer; void calledByRPCLibrary(Particle* index){ [Do stuff to *index] } 目前,我通过网络发送容器中对象的指针作为索引,避免了类包含索引值和搜索函数的需要 远程程序对指针不做任何处理——它们只是将指针作为远程函数调

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

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

void calledByRPCLibrary(Particle* index){
[Do stuff to *index]
}
目前,我通过网络发送容器中对象的指针作为索引,避免了类包含索引值和搜索函数的需要

远程程序对指针不做任何处理——它们只是将指针作为远程函数调用的参数回显


这安全吗?无论是在一般情况下,还是在std::vector可能移动对象的情况下?

将指针发送到std::vector到远程过程调用都是不安全的,因为如果向量发生更改,这些指针将变为无效。当您将新元素推入std::vector时,如果没有足够的容量,则该向量会将其大小加倍,并将其所有内容复制到不同的内存位置。旧指针无效。

这不是对你问题的直接回答,但我觉得有一个隐含的后续问题“如何在网络上安全序列化std::vector?”对此有许多可能的答案,包括Google协议缓冲区和boost.serialization

谷歌协议缓冲区-

boost.serialization-


两者都有轻量级的wire格式。协议缓冲区具有编程语言之间可移植性的额外优势。Boost只是两个C++应用程序之间直接通信的好方法,特别是如果你已经在其他地方使用Booost。p> 另一端的指针没有任何意义指针只在当前进程中有效,将其发送到另一个进程没有意义。另外,请记住,向量可以在添加元素时调整大小,从而使所有指向元素的迭代器和指针无效。我理解,@Ed-这只是一个随机数,但一旦它被发送回源计算机上的函数,它就再次指代了一些有意义的事情。真的-在此期间可能发生了一些事情。可能是指向不同beast的指针,但指针仍可能具有相同的值