は、私は、次のサンプルコードを持っている、とコピー代入は、私はしたくない何かをやっている - それは最初の新しいSAMP(6)、そしてZにコピーを構築しています、それが構築された(6)新しいSAMPを破壊します。 = samp(5)の代わりにsamp(5)のデストラクタを呼び出すことで、元々構築されたsamp(5)を破棄し、新しいsamp(6)で置き換えるなどのコンストラクタを変更する方法はありますか? ?操作のコンストラクタの順序を変更しますか?
#include <iostream>
class samp
{
public:
samp(int a)
{
m_a = a;
std::cout << "cons" <<m_a << std::endl;
}
int m_a;
samp(const samp& other)
{
std::cout << "copy" << m_a << std::endl;
m_a = other.m_a;
}
samp& operator= (const samp& other)
{
std::cout << "assg" << m_a << std::endl;
samp* z =new samp(other.m_a);
return *z;
}
~samp()
{
std::cout << "dest" <<m_a<< std::endl;
}
};
int main()
{
samp z(5);
z = samp(6);
std::cout << z.m_a << std::endl;
return 0;
}
私はあなたの代わりに、通常の移動assingnmentのこれを行うことから得ようとしているか興味があります。 –
移動割当をしますか?古いオブジェクトには何かがあります。何かをするにはデストラクタが必要で、コピーされないようにする必要があります。 – Carbon
*コピーの割り当ては私がしたくないことをしています* - いいえ、あなたが書いたことをやっています。デフォルトのコピー・アサインメントは、それがしなければならないものとまったく同じです。あなたは何らかの理由で足を踏み入れて引っ越して奇妙なことをすることに決めました。 – PaulMcKenzie