В конструкторе копирования шаблонов C ++ для класса шаблонов я считаю, что конструктор копирования шаблонов сделать невозможно. Я пытаюсь сделать это и удается добиться успеха. Я думаю, что это потому, что конструктор перемещения включен в класс. Когда я комментирую конструктор перемещения, он не компилируется: error: use of deleted function 'matrix::Matrix<TYPE>::Matrix(const matrix::Matrix<TYPE>&) [with TYPE = double]
. Я использую MinGW (G CC 6.3.0) на Windows 10. заголовок:
namespace matrix {
enum IDENTITY { BLANK, I_1, I_2, I_3, I_4};
template<class TYPE = double>
class Matrix {
public:
Matrix(const Matrix& m) = delete; //delete normal copy constructor
template <class U> Matrix(const Matrix<U>& m); //template copy constructor
~Matrix();
Matrix(Matrix&& m) noexcept{ //move constructor
std::cout << "Move constructor" << std::endl;
}
.
.//Some other functions declaration
.
private:
unsigned int rows_ = 0;
unsigned int cols_ = 0;
TYPE *data_;
};
.
.//Member functions definition
.
main:
int main(){
matrix::Matrix<int> m2(matrix::I_4); //normal constructor, Identity matrix 4x4
matrix::Matrix<double> m1 = m2; //copy constructor, error here if without move constructor
m1(0,1) = 2; //assign m1(0,1) = 2
//show matrix
std::cout << m1;
std::cout << m2;
}
result:
1 2 0 0
0 1 0 0
0 0 1 0
0 0 0 1
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
Process returned 0 (0x0) execution time : 0.062 s
Вопрос:
- Зачем перемещать конструктор make Возможен ли конструктор копирования шаблона?
- Есть ли какие-либо последствия этого? Безопасно ли это делать?
- Есть ли другой способ написать конструктор копирования шаблона?