2017-03-31 3 views
-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を使用しようとする=私のコンパイラは=私のオペレータ、コピーコンストラクタを使用していない、ということです。

Output:

答えて

2

あなたはそれが常にコピーコンストラクタを使用しています

Martix a; 
Matrix b = a; 

のようにそれを呼び出すとき。これを試してみてください:

Matrix a; 
Matrix b: 
b = a; 

それはコピーコンストラクタ呼び出しの原因となるので、あなたは、マトリックスbを使用して行列a構築しているので、基本的には、Matrix a = b;Matrix a(b);は、同じものです。

+0

ありがとうございました。 しかし、私はそれをMatrix b = aと呼んで、operator = –

+0

としなければなりません。C++がどのように動作するのか、オブジェクトがまだ構築されていないときに代入演算子を使用することはできません。 –

+0

@ Teodor-MarianWolfできません。 'Type name = something'の形式のものは、常にコピーコンストラクタを呼び出します。それが言語の仕組みです。 – NathanOliver