我可以通过赋值运算符编写复制构造函数吗?像这样:
A::A(const A * a) {
*this = a;
}
A &A::operator=(const A * a) {
delete str;
str = new char[strlen(a->str)+1];
strcpy(str, a->str);
return *this;
}
仍然想澄清我是否在上面的例子中做A * a,因为来自不同网站的样本A&一个。 C这会弹出一个应该返回赋值运算符的问题:
A &A::operator=(const A * a)
或
A * A::operator=(const A * a)
一般问题:我的代码是否在上面?
答案 0 :(得分:3)
最佳解决方案是将str
设为std::string
,然后您不需要编写自己的复制构造函数或复制赋值运算符。
但是,假设您必须编写您自己的内容,原因不明显,您无法与我们分享。
在这种情况下,提供一些异常安全的典型方法是实现一个nothrow交换函数,然后在复制构造+交换方面实现复制赋值(与你提议的相反,但提供了更好的异常)复制任务的安全性)
答案 1 :(得分:0)
他们两个都有不同的签名:
A::A(const A &a);
A &A::operator=(const A &a);
您所写的不是复制构造函数,也不是赋值运算符。
查找复制和交换习惯用法,这是允许您按术语或复制构造编写复制作业的内容。