我有以下示例代碼,並且副本分配正在做我不想要的東西 - 它首先構造新的樣本(6),然後將其複製到z,然後銷燬它構建的新樣本(6)。有沒有辦法改變構造函數,使= =像指針一樣,破壞最初構造的samp(5)並用新的samp(6)替換它,調用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