我正在上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;
}
编辑>> 这是一个术语问题。
答案 0 :(得分:3)
对象在运行时分配的内存代表该对象类的资源。
关键词是“分配”。随机值在运行时生成,但由您决定如何存储它们(可能是分配内存,也许不是)。
答案 1 :(得分:1)
在C ++中,“资源”一词具有特定含义,与成语“资源获取是初始化”有关,我认为这是你正在学习的内容以及问题的真正要求。
简单来说,资源是指在获得资源后必须清理/释放资源的资源。意思是,把它放回你找到它的地方,把它归还给系统等,通常是因为,其他人(其他一些程序)可能想尽快使用它。它可能是一个硬件,如设备,也许是打印机。它可能是一个软件构造,就像在线程中使用的锁一样。或者它可能只是记忆。
当您从rand
这样的函数中获取随机位时,您不需要将它们还给任何人或任何东西,并且在完成它们之后没有其他人会使用它们。之后你可以忘掉它们。因此,它们不应被视为用于此习语或三规则等目的的资源。如果随机位通过堆分配的内存传递,那么这是可能需要释放的资源。但我会说在这种情况下,随机位不是资源,只有包含它们的内存是。
答案 2 :(得分:0)
是的,无论是动态分配还是静态分配的所有内存都是资源。对于上面的示例,您需要释放为阵列分配的内存。至于复制构造函数和赋值运算符yes,除非你想要那些不处理数组中动态内存的行为的默认行为,假设它是在使用复制构造函数或赋值运算符之前分配的,因为你没有分配它在构造函数中。