是否可以跨 dll 边界返回常量引用/指向 std::vectors?

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

本文关键字:指向 std 引用 vectors 常量 dll 返回 边界 是否      更新时间:2023-10-16

我在单独的 dll 中有业务逻辑,并且为了能够从这个 dll 导出一个类以供例如 GUI 类使用,我被告知不要跨 dll 接口边界传递任何 std 模板对象,如 std::vector。但是,我可以将引用和指针传递给模板类型对象。

什么时候可以将引用或指向 std::vector 的指针(如果这有区别,则用指针填充(传递给业务逻辑之外/跨 dll 边界的代码(作为 getter 的返回值(。例:

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

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

或者我应该完全避免传递 std::vector,在这种情况下会有什么替代方案?

编辑:我知道跨dll边界传递对象是有问题的,你必须知道使用哪个编译器等。我想知道返回常量引用和指针是否是一种解决方法,因为我被告知它是,以及这是否是一种好的做法。

任何证明"不跨 dll 接口边界传递任何 std 模板对象(如 std::vector("的理由同样适用于传递指向 std::vector 的指针和引用。

当跨边界的代码取消引用指针时,它会遇到同样的问题。

所以,没有。