【问题标题】:clearing and deleting multiprecision variables清除和删除多精度变量
【发布时间】:2012-12-26 05:22:44
【问题描述】:

我正在使用一些动态分配的多精度变量数组(来自 mpc 库),想知道是否有必要同时清除变量和删除数组以避免内存泄漏等?也就是说,下面sn-p中的所有家务都是必要的吗?

using namespace std;
#include <gmp.h>
#include <mpfr.h>
#include <mpc.h>

int main() {

    int i;
    mpc_t *mpcarray;
    mpcarray=new mpc_t[3];
    for(i=0;i<3;i++) mpc_init2(mpcarray[i], 64);

    // Manipulations

    for(i=0;i<3;i++) mpc_clear(mpcarray[i]);
    delete [] mpcarray;

    return 0;
}

【问题讨论】:

    标签: c++ memory-management memory-leaks dynamic-memory-allocation mpc


    【解决方案1】:

    是的,这是必要的。

    生活的一般规则在这里适用:

    “你应该丢弃你使用的东西!”

    如果不这样做,如果mpc_t 的析构函数包含产生副作用的代码,则会导致内存泄漏或更糟糕的未定义行为。

    动态内存是一项为您的程序提供显式内存管理的功能,如果您使用它(调用newnew []),那么您有责任确保其正确使用( 分别调用deletedelete [] 来解除分配)。

    请注意,您最好使用自动/局部变量而不是动态指针。
    如果必须,您应该使用 smart pointers 而不是原始指针。它们为您提供了动态内存减去显式内存管理开销的优势。

    【讨论】:

      猜你喜欢
      • 2015-08-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-27
      • 2014-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-18
      相关资源
      最近更新 更多