我在一个单独的dll中具有业务逻辑,并且能够从此dll中导出一个类以供GUI类使用,有人告诉我不要在dll接口边界上传递任何std模板对象,例如std :: vector。但是,我可以将引用和指针传递给模板类型对象。
什么时候可以将对std :: vector的引用或指针(如果有区别,则填充指针)传递给业务逻辑之外/跨dll边界的代码(作为来自getter的返回值)。例:
const std::vector<int*>& getNumbers();
const std::vector<int*>* getNumbers();
我可以一直这样吗?与仅按价值传递相比,这两种选择有何含义?
还是应该完全避免传递std :: vector,在这种情况下会有什么选择?
编辑:我知道跨dll边界传递对象是有问题的,并且您必须知道使用了哪个编译器,等等。我想知道是否无论如何都返回const引用和指针可以作为一种解决方法,因为有人告诉我,是个好习惯
任何证明“不跨越dll接口边界传递任何std模板对象,如std :: vector”的理由都将同样适用于传递指向std :: vector的指针和引用。
当跨边界的代码取消引用指针时,它将遇到相同的问题。
所以不行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句