可以跨 dll 边界 return const references/pointers 到 std::vectors 吗?

Ok to return const references/pointers to std::vectors across dll boundaries?

我在单独的 dll 中有业务逻辑,并且能够从该 dll 中导出 class 以供 GUI classes 等使用,有人告诉我不要传递任何std 模板对象,如 std::vector 跨越 dll 接口边界。但是,我可以将引用和指针传递给模板类型对象。

什么时候可以将引用或指向 std::vector 的指针(如果有区别,则用指针填充)传递给业务之外的代码 logic/across dll 边界(如来自 getter 的 return 值)。示例:

const std::vector<int*>& getNumbers();
const std::vector<int*>* getNumbers();

我可以一直这样吗?与仅按价值传递相比,这两种选择的含义是什么?

或者我是否应该完全避免通过 std::vector,在这种情况下有什么替代方案?

编辑:我知道跨 dll 边界传递对象是有问题的,你必须知道使用哪个编译器等。我想知道 returning const 引用和指针是否可以作为一种解决方法,因为有人告诉我是的,如果这是好的做法。

任何证明 "not to pass any std template objects like std::vector across the dll interface boundary" 合理的理由都同样适用于将指针和引用传递给 std::vector。

当代码越界取消引用指针时,它会运行进入同样的问题。

所以,没有。