是否可以跨 dll 边界返回常量引用/指向 std::vectors?
Ok to return const references/pointers to std::vectors across dll boundaries?
我在单独的 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 的指针和引用。
当跨边界的代码取消引用指针时,它会遇到同样的问题。
所以,没有。
相关文章:
- 如何调用存储在指向"std::函数"的指针中的 lambda?
- 是否可以跨 dll 边界返回常量引用/指向 std::vectors?
- 指向 std::unrodered_map 中元素的指针返回'Read access violation'
- 指向std::invoke中成员函数对象的指针
- 存储指向 std::string 数据的指针是否安全?
- 指向STD :: vector,指针声明
- 为什么将指针指向std ::设置的提取节点是未定义的行为
- C++ DLL 返回指向 std::list<std::wstring 的指针>
- 指向 std::vector 元素时编译器错误<bool>?
- 我应该如何保留指向std::unique_ptr的指针
- 通过 std::vector.data() 指向 std::vector 元素的指针指向损坏的数据
- C++:指向std::map的指针的奇怪行为
- 我可以定义一个指向 std::function 类型的对象的函数指针吗?
- 使用 std::initializer_list 使函数指向 std::min
- 如何在删除一个元素(double for循环)后正确地指向std::list
- 如何获得指向std::vector中最后插入元素的指针
- 我怎样才能指向 std::set 的成员,以便我可以判断该元素是否已被删除
- 有一个指向std::vector-element的指针,该指针目前还不存在,但稍后将被构造,这是个好主意吗?
- 指向std::array成员的指针
- 在c++ 11中,返回指向std::string中某个位置的引用/指针的最高效方法是什么?