发现类副本构造的问题
Posted
技术标签:
【中文标题】发现类副本构造的问题【英文标题】:Finding problem with class copy construction 【发布时间】:2011-03-24 00:27:30 【问题描述】:我的一项 c++ 作业有问题。它更多的是一个理论问题。代码如下:
//a class implementation
class IntArrays
public:
IntArrays(int n): data(new int[n]), size(n)
~IntArrays() delete[] data; ;
const int& operator[](int n) const
return data[n];
IntArrays(const IntArrays& ar):
data(new int[ar.size]),
size(ar.size)
std::copy(data, data + size, ar.data);
private:
int* data;
int size;
;
//a driver
int main()
IntArrays a(100);
IntArrays b = a; // Problem!
return 0;
In 1-2 sentences, explain why the second line of the driver program is problematic.
我真的不知道驱动程序第二行的错误是什么,因为当我运行它时它很好。起初我以为是因为 = 运算符没有重载,但 IntArrays b = a 使用的是复制构造函数,所以不是这样。我完全困惑,请帮助。如果我没有得到答案,这会很困扰我。
提前致谢。
【问题讨论】:
这个问题是否来自您确定准确可靠的来源?提出它的人是否有可能错误地认为IntArrays b = a;
会使用operator=
?
这是一道作业题,我直接从word文件中复制过来的。我之前搜索了一下,它使用 IntArrays b = a; 的复制构造函数但它是从头开始创建的。
【参考方案1】:
你抄错了。
std::copy(data, data + size, ar.data);
应该是:
std::copy(ar.data, ar.data + size, data);
【讨论】:
谢谢,我不知道他所说的第二行有什么问题是不是这个意思,因为从技术上讲,这不在第二行,但它是第二行使用的。 @Pete42:不过,它准确地模拟了现实生活 - 您第一次在程序中观察到问题的行很少是包含错误的行。或者可能只是因为如果问题是“std::copy 行中的错误是什么”,它会使分配变得太容易...... 我完全同意你的看法,非常感谢你。我们从来没有真正在类中创建自定义复制构造函数,所以我是新手。以上是关于发现类副本构造的问题的主要内容,如果未能解决你的问题,请参考以下文章