相关疑难解决方法(0)

围绕共享库边界的C++接口设计

假设我有两个项目.一个是应用程序,另一个是共享库,包含可以由不仅仅是这个应用程序使用的公共可重用代码.

我的应用程序使用STL,我的共享库也使用STL.这里的第一个问题是我的共享库正在使用STL.如果我在我的应用程序中构建了一个较新版本的STL,但由于没有必要重建我的共享库,那么我们将立即遇到兼容性问题.

我首先想到解决这个问题的方法是在共享库类的接口中根本不使用STL.假设我的库中有一个函数,它接受一个字符串并用它做一些事情.我会让函数原型看起来像:

void DoStuffWithStrings( char const* str );
Run Code Online (Sandbox Code Playgroud)

代替:

void DoStuffWithStrings( std::string const& str );
Run Code Online (Sandbox Code Playgroud)

对于字符串,这可能在不同版本的STL之间可以正常,但缺点是我们将从std::string,char*返回到std::string,这似乎会导致性能问题.

是否建议将STL对应的原始类型装箱/拆箱?当我们尝试对a执行此操作时,这会变得更糟std::list,因为我确实没有"原始类型"我们可以轻松地传递它,而无需执行某种O(n)或类似的操作.

哪种设计在这种情况下效果最好?每个的优点/缺点是什么?

c++ design-patterns stl shared-libraries

8
推荐指数
1
解决办法
2266
查看次数

什么时候DLL会使用与可执行文件不同的堆?

我知道如果你的DLL静态链接到不同版本的运行时,那么它会创建自己的堆.如果它被指示制作堆也将如此.在这种情况下,DLL删除exe分配的内容是不安全的.在什么情况下这不适用(例如,DLL安全删除exe分配的内容)?如果exe和DLL静态链接同一运行时库是否安全?

谢谢

基本上有一种方法,谁分配它可以只做 addEvent(new DerivedEvent(), FunctorDestroyClass());

c++ dll

5
推荐指数
1
解决办法
1789
查看次数

标签 统计

c++ ×2

design-patterns ×1

dll ×1

shared-libraries ×1

stl ×1