【发布时间】:2013-12-08 10:34:50
【问题描述】:
Line Line::operator =(Line ln) {
cout << "Assignment operator\n";
Line temp;
temp.ptr = new int;
*temp.ptr = *(ln.ptr);
return temp;
}
在上面这段代码中,执行以下语句时没有调用复制构造函数:
return temp;
既然是按值返回,为什么不调用拷贝构造函数?
谢谢
【问题讨论】:
-
您的运算符实现错误:
operator=应该返回一个 reference 到*this,而不是一个新对象。 -
@Konrad:感谢您指出这一点。所以你的意思是:*this.ptr = *(ln.ptr);并返回 *this?
-
是的。整个
temp对象是不必要的。但是,您也不应该在这里使用(原始)指针。 C++ 提供了更好的机制。 -
@KonradRudolph:谢谢!我只是用这段代码向自己展示一些概念
标签: c++ copy-constructor