我在包含 c 和 cpp 的大型应用程序中工作。所有文件都保存为 cpp 扩展名,但代码是用 c-style 编写的。我的意思是它是通过 malloc 和 realloc 和 calloc 定义结构而不是类分配内存。最近他们已经安装了 boost 库所以我打算在我现有的代码库中使用所以我有一些以下问题。
- 我可以将 std::shared_ptr 与 malloc 和 free 一起使用吗?
- 如果是的话,谁能指出我的示例代码库?
- 如果我在我的应用程序中创建 std::shared_ptr 并将这个指针传递给另一个使用 malloc 或 calloc 的函数,它会影响任何功能吗?
或者换句话说:
对于以下代码,如何使用 std::shared_ptr 实现类似的功能:
void allocateBlocks(int **ptr, int *cnt)
{
*ptr = (int*)malloc(sizeof(int) * 10);
*cnt = 10;
/*do something*/
}
int main()
{
int *p = NULL;
int count = 0;
allocateBlocks(&p, &count);
/*do something*/
free(p);
}
我们调用一些函数,它们接受双指针并填充其应用程序内部的结构并使用 malloc。我们可以将这些指针分配给 std::shared_ptr 吗?例如:
typedef struct txn_s
{
int s;
int d;
int *e;
} txn_t;
typedef boost::shared_ptr<txn_t> tpointer;
tpointer((txn_t*)::malloc(sizeof(txn_t),::free));