gpt4 book ai didi

c++ - GMP 和智能指针

转载 作者:太空宇宙 更新时间:2023-11-04 15:27:56 26 4
gpt4 key购买 nike

我正在使用 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;
}

如果有任何例子,我将不胜感激。

最佳答案

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

将类指针存储在 shared_ptr 中不会达到您想要的效果。它会跟踪对 mpz_t 变量的引用数量,并且一旦不再有对它的引用,它也会删除 mpz_t 变量。但是,这只会释放 mpz_t 变量本身,它类似于指针。它不调用 mpz_clear 函数。

智能指针非常有用,但它们是指类对象,而不是类指针变量。他们负责销毁他们引用的对象。如果它们引用复杂对象,这是有意义的,但如果它们引用指针,则没有意义。

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

shared_ptr<mpz_class> func()
{
shared_ptr<mpz_class> z(new mpz_class("23423423423", 10));
return z;
}

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

p->get_mpz_t()

其中 p 的类型为 shared_ptr

关于c++ - GMP 和智能指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4019109/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com