【问题标题】:C++ | Are random constrained arrays considered resources?C++ |随机约束数组是否被视为资源?
【发布时间】:2016-02-20 16:07:07
【问题描述】:

我正在学习 C++ 课程。在我们的文字中是这样说的:

对象在运行时分配的内存表示该对象类的资源。

如果数组具有随机长度,它是否被视为资源,因此需要复制构造函数/赋值运算符?

class someclass{


    public :
        int length;
        int* randomarray;

};

int main(){

    someclass obj;

    obj.length = rand() % 50 + 1;

    obj.randomarray = new int[obj.length];

    return 0;

}

编辑>> 这是一个术语问题。

【问题讨论】:

  • “随机值”是什么意思?
  • 随机生成的数字。将编辑。
  • “随机约束数组”是什么意思?你说的是随机确定长度的数组吗?
  • 你所说的“随机约束数组”是什么意思:形容词“随机”是否适用于“约束”一词,或“数组”或(未说明的)“内容”。跨度>
  • @bigcodeszzer 正交查询。随机生成的数字绝不会与动态内存分配相关联。您的问题完全不清楚,并且可能带有严重的误解。

标签: c++ random copy-constructor dynamic-memory-allocation assignment-operator


【解决方案1】:

对象在运行时分配的内存表示该对象类的资源。

关键词是“分配”。随机值在运行时生成,但如何存储它们取决于您(可能分配内存,也可能不)。

生成并不意味着分配。

【讨论】:

    【解决方案2】:

    在 C++ 中,“资源”一词具有特定含义,与“资源获取即初始化”习语有关,我认为这就是您正在学习的内容以及问题的真正含义。

    简单来说,资源是在你获得它之后,你必须清理/释放它的东西。意思是,把它放回你找到它的地方,把它放回系统等等,通常是因为其他人(一些其他程序)可能很快就会使用它。它可能是一个硬件,比如一个设备,也可能是一台打印机。它可能是一种软件结构,例如线程中使用的锁。也可能只是记忆。

    当您从像rand 这样的函数中获取随机位时,您无需将它们还给任何人或任何东西,并且在您完成它们之后没有其他人会使用它们。之后你可以忘记它们。因此,出于此习惯用法或三规则等的目的,不应将它们视为资源。如果随机位通过堆分配的内存传递,则可能需要释放该资源。但我会说,在那种情况下,随机位不是资源,只有包含它们的内存才是。

    【讨论】:

    • 那么在我的示例中的随机大小数组的情况下,该数组是否会被视为资源?它是动态分配的。
    • 评论转发 --->文本在动态成员和用户输入之间建立了牢固的联系。我的问题是:由于“随机”和“用户输入”都是不可知的,它们在“动态”方面是否不等价,因此 /both/ 资源?
    • 是的,所以在我看来,随机位和用户输入都不是“资源”。通常,用户输入具有可变大小,并且必须保存在动态内存中。但是那个内存是资源,而不是用户输入本身。具体来说——假设我正在制作一个用于保存程序命令行参数的结构。该结构可能有一堆std::string 类型的成员。结构本身不是资源,也不需要 dtor,即使它代表用户输入。但是每个字符串都是一个资源,它的实现满足三法则。
    【解决方案3】:

    是的,无论是动态分配还是静态分配,所有使用的内存都是资源。对于上面的示例,您需要释放为数组分配的内存。至于复制构造函数和赋值运算符,是的,除非你想要那些不会处理数组中动态内存的默认行为,假设它在使用复制构造函数或赋值运算符之前已经分配,​​因为你不分配它在构造函数中。

    【讨论】:

      猜你喜欢
      • 2014-01-12
      • 1970-01-01
      • 2013-10-17
      • 2015-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 2013-08-29
      相关资源
      最近更新 更多