我正在编写一个库,其中包括一个接口以返回/接收 shared_ptr
对象。
一切都很顺利,直到我想起使用我的库的应用程序可能具有不同的 CRT 版本和 STL 版本。
这引出了两个问题:
如果我的 .lib 文件和使用它的应用程序之间的 STL 版本不同,如何确保在我的库和应用程序中使用相同版本的
shared_ptr
?(STL 不提供二进制兼容性)假设我通过复制 STL 定义
shared_ptr
的头文件并将其重命名为my_shared_ptr
或以任何方式解决了问题 1,现在我可以在我的库和应用程序中使用相同的shared_ptr
实现。但是,由于这是一个模板类,并且 CRT 版本不同,我该如何确保new
拥有匹配的delete
?如果我的库编译my_shared_ptr<SomeClass>
,而应用程序编译my_shared_ptr<SomeClass>
,则每次编译都会根据 CRT 版本插入自己的new
和delete
。现在,当我从应用程序创建并传递一个shared_ptr
给我的库,以便在使用完毕后销毁它时,可能会调用不匹配的new
和delete
。
我应该假设需要编译两个 my_shared_ptr<SomeClass>
的实例,一个由 .lib 文件编译,另一个由应用程序编译吗?
感谢任何帮助, Leo
shared_ptr
与STL没有任何关系。 - curiousguy