-1
の代わりに呼ばれるコピーコンストラクタ
私は今Matrixで簡単な演習をしようとしていますが、この操作を実装したいと思います:Matrix a、Matrix b、Matrix c(a)、Matrix d = a、Matrix e = a + b。現時点では私はそれを単純なままにしておきますが、後で同じことをしたいのですが、ダイナミックな割り当てと後でスマートポインタを使用します。オペレータ=
私は明示的なコピーコンストラクタを宣言し、演算子=をオーバーロードしました。また、デストラクタを宣言しました。私は3つのルールを持っています。ここで
は私の関数です:
Matrix& Matrix::operator=(const Matrix& opEven)
{
std::cout << "Operator = " << std::endl;
for (int i = 0; i < ORD; i++)
{
for (int j = 0; j < ORD; j++)
{
arr1[i][j] = opEven.arr1[i][j];
}
}
return *this;
}
Matrix::Matrix(const Matrix& obj)
{
std::cout << "Constructing matrix using copy c-tor." << std::endl;
for (int i = 0; i < ORD; i++)
{
for (int j = 0; j < ORD; j++)
{
arr1[i][j] = obj.arr1[i][j];
}
}
}
問題は、私は行列Dを使用しようとする=私のコンパイラは=私のオペレータ、コピーコンストラクタを使用していない、ということです。
ありがとうございました。 しかし、私はそれをMatrix b = aと呼んで、operator = –
としなければなりません。C++がどのように動作するのか、オブジェクトがまだ構築されていないときに代入演算子を使用することはできません。 –
@ Teodor-MarianWolfできません。 'Type name = something'の形式のものは、常にコピーコンストラクタを呼び出します。それが言語の仕組みです。 – NathanOliver