GMP和智能指针

Chr*_*ruS 0 c++ boost gmp

我正在使用gnump并且有一个必须返回的函数mpz_t.所以我必须使用原始指针来返回一个值.我new为指针分配空间并将其作为参数发送到我的函数中.

我认为使用智能指针会更好.但我之前没有和他们合作过.我阅读了手册,但仍然无法理解如何shared_ptr正确使用从函数返回变量.

shared_ptr<mpz_t> func()
{
    mpz_t z;
    mpz_init_set_str(z, "23423423423", 10);

    shared_ptr<mpz_t> p /* Shall I allocate space with "new" or smth else?.. */

    return p;
}
Run Code Online (Sandbox Code Playgroud)

我会感激任何一个例子.

spa*_*ist 5

在此上下文中使用共享指针对您没有帮助.类型mpz_t本身是指针式的.通过调用任何mpz_init _...函数来初始化这样的指针.但是,您需要调用mpz_clear来释放由您使用的init函数分配的空间.

将指针存储在shared_ptr中并不具备您想要的效果.它确实跟踪你的mpz_t变量的引用数量,并且一旦没有对它的引用,它也会删除mpz_t变量.但是,这只释放了mpz_t变量本身,它是指针式的.它不会调用mpz_clear函数.

智能指针非常有用,但它们是指类对象,而不是指针式变量.他们负责破坏他们所引用的物体.如果它们引用复杂对象,那么这是有意义的,但如果它们引用指针则不行.

GNU MP提供了一个C++类接口.(寻找mpz_class)

shared_ptr<mpz_class> func()
{
  shared_ptr<mpz_class> z(new mpz_class("23423423423", 10));
  return z;
}
Run Code Online (Sandbox Code Playgroud)

如果需要将mpz_t传递给其他函数,可以从共享指针获取它:

p->get_mpz_t()
Run Code Online (Sandbox Code Playgroud)

其中p的类型为shared_ptr <mpz_class>.