构造函数和赋值运算符

时间:2014-06-05 17:47:39

标签: c++

我可以通过赋值运算符编写复制构造函数吗?像这样:

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)

一般问题:我的代码是否在上面?

2 个答案:

答案 0 :(得分:3)

最佳解决方案是将str设为std::string,然后您不需要编写自己的复制构造函数或复制赋值运算符。

但是,假设您必须编写您自己的内容,原因不明显,您无法与我们分享。

在这种情况下,提供一些异常安全的典型方法是实现一个nothrow交换函数,然后在复制构造+交换方面实现复制赋值(与你提议的相反,但提供了更好的异常)复制任务的安全性)

答案 1 :(得分:0)

他们两个都有不同的签名:

A::A(const A &a);
A &A::operator=(const A &a);

您所写的不是复制构造函数,也不是赋值运算符。

查找复制和交换习惯用法,这是允许您按术语或复制构造编写复制作业的内容。