コピーコンストラクタは、既存のオブジェクトに基づく新しいオブジェクトが作成されたときに呼び出されることを理解します。しかし、私は同じことをしようとしている、私はコピーコンストラクタが呼び出されていないことがわかります。リンク[https://www.tutorialspoint.com/cplusplus/cpp_copy_constructor.htm]、コピーコンストラクタを呼び出す必要があります行m_aObject = local_obj1;
を1としてコピーコンストラクタの呼び出し
/*
* class definition
*/
class A
{
public:
A(int mn, int mx); //default constructor
A(A const& obj); //copy constructor
~A();
private:
int* ptr;
int max;
int min;
}
class B
{
public:
B();
void print();
private:
A m_aObject;
}
/*
* B.cpp
*/
void B::print()
{
A local_obj1(2,3);
local_obj1.ptr = Global_array; //some global array.
m_aObject = local_obj1; // should invoke the copy constructor
}
/*
* A.cpp
*/
A::A(A const& obj)
{
cout << "copy constr. invoked"<<endl;
ptr = new int[10];
for(int i= 0; i< 10; i++)
ptr[i] = obj.ptr[i];
}
A::A(int mx, int mn)
{
min = mn;
max = mx;
}
:後 は、コードの私の作品です。
しかし、私は上記のステートメントの実行後、コピーコンストラクタが呼び出されることはありません。コピーコンストラクタ内の印刷。コンソールには決して表示されません。
m_aObject = local_obj1;
行が本当にコピーconstrを呼び出していますか? ?
コピーコンストラクタを呼び出すとします。 m_aObject(local_obj1);
、 コンパイルエラーが発生するerror: no match for call to '(A) (A&)'
上記の場合にコピーコンストラクタを呼び出す方法はありますか。