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)
是的,Strousrtup的方式是自我安全.也就是说,一个实例可以被分配到自身
a = a;
Run Code Online (Sandbox Code Playgroud)
一旦你完成这本书,你可能想通过迈耶的"有效的C++"快跑(2005年),这也是一个很好的文本,并认为这样的问题,因为这些.
| 归档时间: |
|
| 查看次数: |
161 次 |
| 最近记录: |