aşağıdaki kod parçasını düşünün:Nesneden taşınan neden yıkıcı çalıştırılır?
struct foo {
std::string id;
};
int main() {
std::vector<foo> v;
{
foo tmp;
v.push_back(std::move(tmp));
}
}
kod parçasının içinde ortaya:
sınıfafoo
gidiyor varsayılan yapıcı nesnenin yapımı için çağırılacak
tmp
.class foo
'un yıkıcısı iki kez çalıştırılacak.
foo
sınıfındaki taşıma kurucusu
v.push_back(std::move(tmp));
numaralı ifadede çağrılacaktır.
Sorular:
- nesneden taşınmış bir yıkıcı iki kez denir ki?
- Gerçekten taşınmakta olan nesneden ne hareket ediyor?
Taşınan nesne yalnızca bir kez bozulur. Her nesne bir kez yaratılır ve bir kez tahrip edilir. İki yıkıcı çağrı, "tmp" ve vektördeki nesne içindir. –