【问题标题】:Constructor - memory allocation failed构造函数 - 内存分配失败
【发布时间】:2014-12-18 13:49:49
【问题描述】:

我有一个构造函数,它用 r 行和 c 列创建并清空 A

A::A(int r, int c)
    : row(r), column(c), e(new int[r*c])
{
    for (int i = 0; i < r*c; i++)
    {
        e[i] = 0;
    }
}

我想知道内存分配是否会失败,它仍然会用非零值初始化行和列。如何预防?

【问题讨论】:

  • 去了有关系吗?将引发异常,并且到目前为止构建的所有内容都将被销毁。
  • @AlanStokes 我猜这是 OP 的问题。 OP 不知道 new 会引发失败。
  • 反正循环是没有必要的,做new int[r*c]()也会有同样的效果

标签: c++ arrays multidimensional-array constructor


【解决方案1】:

如果new 分配内存失败,它会抛出std::bad_alloc 的实例,即异常。

如果您的构造函数失败,所有已完全构造的成员和基都将被销毁,并且不会创建您类型的有效实例。

因此,如果您通过异常离开构造函数,那么您的 rc 将毫无价值,因为它们不存在。

你确实永远不会到达你似乎担心的循环。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 2016-07-29
    • 1970-01-01
    • 2015-09-26
    • 2015-05-15
    • 2017-08-17
    • 2015-03-12
    相关资源
    最近更新 更多