c++ - boost shared_ptr 和内存分配不起作用

标签 c++ memory-management boost mfc

我创建了一个 .dll(具有 MFC 静态链接和静态链接的 Windows 运行时库),我正在链接到一个使用 boost 进行内存管理的库(该库是 PCL)。一切都编译正常,没有错误,但我注意到在库代码内部,内存分配工作不正常。例如,下面一行

indices_.reset (new std::vector<int>);
try    {      
  indices_->resize (input_->points.size ());    
}

分配一个新的 std::vector,不抛出任何异常,但是在 resize 函数之后 vector 仍然是空的。为什么会这样?

如果我自己在自己的 DLL 代码中分配 vector ,则分配工作正常。但是会出现其他错误,例如突然消失的字符串(当我将鼠标悬停在这些字符串上时,Visual Studio 调试器显示“读取内存错误”)。

我使用库到 DLL 的静态链接(我使用的是静态运行时库/MT)。

会发生什么?

最佳答案

静态运行时库是问题所在。

您只能将内存与相同的运行时库进行互操作。如果你是静态链接,那么 DLL 和 EXE 有它们自己不同的拷贝——如果你试图在它们之间传递复杂类型,这是非常糟糕的。

如果您想共享像 std::vector 这样的复杂对象,您需要动态链接两侧的运行时以获得一份 CRT。

我相信 MFC 和 CRT 有同样的问题——你需要共享一个拷贝,而不是每个人都有一个拷贝。

关于c++ - boost shared_ptr 和内存分配不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29846693/

相关文章:

c++ - 为什么 std::vector::reserve 调用复制构造函数?

python - 为什么将 numpy 数组与列表进行比较会消耗如此多的内存?

iphone - 内存警告和崩溃问题

c++ - boost::iterator_adapter 不适用于 STL 算法

c++ - MC 模拟中的 openmp 私有(private)/共享数据

c++ - Boost 中的索引矩阵

c++ - 在文件中间#include 是好习惯吗?

c++ - 将静态库与 c++/cmake 链接

c - Realloc 函数无法正常工作?

c++ - 在继承的情况下不在此范围内声明