C ++ |随机约束数组是否被视为资源?

时间:2015-11-18 19:03:08

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

我正在上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;

}

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

3 个答案:

答案 0 :(得分:3)

  

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

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

生成并不意味着分配。

答案 1 :(得分:1)

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

简单来说,资源是指在获得资源后必须清理/释放资源的资源。意思是,把它放回你找到它的地方,把它归还给系统等,通常是因为,其他人(其他一些程序)可能想尽快使用它。它可能是一个硬件,如设备,也许是打印机。它可能是一个软件构造,就像在线程中使用的锁一样。或者它可能只是记忆。

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

答案 2 :(得分:0)

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