c ++ copy assignment语法比较 - 哪个更好?

Ben*_*n R 0 c++ operator-overloading c++11

我正在大学学习C++,在休息期间,我将通过Strousrtup的"CPP编程语言第4版"来填补我理解的空白以及我们在课堂上教授的内容.

在3.3.1节中,他详细介绍了矢量类的简化版本的代码片段(特定于类型,仅为双精度型):

Vector& Vector::operator=(const Vector& a) {
    double* p = new double[a.sz]; 
    for (int i=0; i!=a.sz; ++i)
        p[i] = a.elem[i]; 
    delete[] elem;
    elem = p;
    sz = a.sz;
    return *this;
}
Run Code Online (Sandbox Code Playgroud)

现在,我已经写了我自己的一个重写的拷贝赋值运算符的版本之前,我看到了这一点,这似乎正常工作与这种简化的准向量一起去,但我想知道,有什么不对删除分配的内存elem点,然后重新初始化它,我做以下,比Stroustrup的是如何做的?

vectoR& vectoR::operator=(const vectoR& v) {
    delete[] elem;
    elem = new double[v.size()];
    sz = v.size();
    for (int i = 0; i != sz; ++i) 
        elem[i] = v[i];
    return *this;
}
Run Code Online (Sandbox Code Playgroud)

Cra*_*mer 5

是的,Strousrtup的方式是自我安全.也就是说,一个实例可以被分配到自身

a = a;
Run Code Online (Sandbox Code Playgroud)

一旦你完成这本书,你可能想通过迈耶的"有效的C++"快跑(2005年),这也是一个很好的文本,并认为这样的问题,因为这些.

  • 您也可能会注意到异常安全 (4认同)