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

C++ | Are random constrained arrays considered resources?

我正在学习 class C++。在我们的文字中说:

Memory that an object allocates at run-time represents a resource of that object's class.

如果数组的长度是随机的,它是否被视为资源并因此需要复制 constructor/assignment 运算符?

class someclass{


    public :
        int length;
        int* randomarray;

};

int main(){

    someclass obj;

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

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

    return 0;

}

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

Memory that an object allocates at run-time represents a resource of that object's class.

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

生成并不意味着分配。

在 C++ 中,单词 'resource' 与成语 "resource acquisition is initialization" 相关,我认为这就是您正在学习的内容以及问题真正要问的内容。

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

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

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