【问题标题】:C++ Boost library - passing Shared pointer to a functionC ++ Boost库 - 将共享指针传递给函数
【发布时间】:2012-09-05 13:46:18
【问题描述】:

假设共享指针可以如下创建

typedef boost::shared_ptr<Employee_t> srdpointer;     
srdpointer ptr((Employee_t*)malloc(sizeof(Employee_t)),std::ptr_fun(free));

我需要传递共享指针,它将分配由 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;
    locateBlocks(&p, &count);

    /*do something*/

    free(p);
}

如何使用shared_ptr 实现类似的功能,如上面的代码所示。

【问题讨论】:

  • 请问您为什么使用malloc 而不是new
  • 看起来像 std::vector 会满足你的需要。
  • 您是否知道,reset()ing shared_ptr 实例与新指针不会改变其他 shared_ptr 实例(它们将指向旧对象)?

标签: c++ boost shared-ptr scoped-ptr


【解决方案1】:

你的意思是这样的吗?

void allocateBlocks( boost::shared_ptr<int>& out, int& count )
{
  out.reset(new int[...]);
  count = 10;
}

PS:我建议看看 boost::shared_array 和朋友们只是动态分配数组。

PS:std::vector 也可以吗?

【讨论】:

  • “请问您为什么使用 malloc 而不是 new” - 我们的应用程序是 C 和 CPP 代码的混合体。
  • -1 将malloc-ed 内存传递给将使用delete 运算符释放它的构造。
猜你喜欢
  • 1970-01-01
  • 2015-10-12
  • 2021-03-10
  • 2014-02-20
  • 2012-02-22
  • 2012-05-29
  • 1970-01-01
  • 2011-04-17
  • 1970-01-01
相关资源
最近更新 更多