【发布时间】:2020-06-16 17:23:39
【问题描述】:
我在 Clion 中为我的 C++11 编写了以下代码:
Matrix<T> &Matrix<T>::operator=(const Matrix<T> &matrix) {
if (this == &matrix) {
return *this;
}
int matrix_size = matrix.size();
T *temp = new T[matrix_size];
try {
for (int i = 0; i < matrix_size; ++i) {
temp[i] = data[i];
}
}
catch (...)
{
delete[] temp;
throw;
}
delete[] data;
data = temp;
dimensions = matrix.dimensions;
return *this;
}
但是它告诉我catch里面写的是一个无法访问的代码,这是为什么呢?
【问题讨论】:
-
@ThomasSablik 复制
T可能会抛出异常。 -
我的猜测是,由于模板是在编译时评估的,因此您实际上并没有为 T 使用具有抛出复制操作的类型,并且编译器设法看到了这一点。也许尝试为 T 使用一些可能会抛出它的复制赋值运算符的东西,看看这是否会使警告消失。但这只是猜测。
-
FWIW,如果您使用
std::vector而不是使用new手动创建数组,您甚至无需担心。
标签: c++ class generics operator-overloading