为什么赋值运算符会执行与其匹配构造函数不同的操作?

Nei*_*l G 4 c++ constructor assignment-operator

我正在阅读一些提升代码,并且发现了这个:

inline sparse_vector &assign_temporary(sparse_vector &v) {
    swap(v);
    return *this;
}
template<class AE>
    inline sparse_vector &operator=(const sparse_vector<AE> &ae) {
        self_type temporary(ae);
        return assign_temporary(temporary);
    }
Run Code Online (Sandbox Code Playgroud)

它似乎将所有构造函数映射到赋值运算符.大.但是为什么C++会选择让他们做不同的事情呢?我能想到的只是scoped_ptr?

fre*_*low 6

为什么C++会选择让他们做不同的事情?

因为赋值适用于完全构造的对象.在资源管理类中,这意味着每个成员指针都已指向资源.将其与构造函数进行对比,其中成员在执行之前没有任何意义.

顺便说一句,在C++的早期阶段,T a(b);实际上被定义为T a; a = b;,但事实证明这是低效的,因此引入了复制构造函数.