Ben ile taşındı-nesne ne yapabilirim?
Standart taşındıktan sonra bir nesne ile yapabilirim tam olarak tanımlar? Yanına taşındı-nesne yapabileceğin tek şey imha yapmak olduğunu düşünürdüm, ama bu yeterli olmaz.
Örneğin, işlev şablonu standart kütüphanede tanımlı olarak swap
:
template <typename T>
void swap(T& a, T& b)
{
T c = std::move(a); // line 1
a = std::move(b); // line 2: assignment to moved-from object!
b = std::move(c); // line 3: assignment to moved-from object!
}
Belli ki, atamak mümkün olmalıdır taşındı nesneleri, aksi halde hat 2 ve 3 başarısız olur. Başka taşındım-nesne ile ne yapabilirim? Tam olarak nerede standardında bu ayrıntı bulabilirim?
(Bu arada, neden T c = std::move(a);
yerine T c(std::move(a));
hat 1?)
CEVAP
17.6.5.15 [lib.türleri.movedfrom]
Tipleri standart C kitaplığı içinde tanımlanan nesneleri taşınmış olabilir (12.8). Taşıma işlemlerini açıkça belirtilmiş olabilir ya da dolaylı olarak oluşturulan. Aksi belirtilmediği sürece, bu tür taşındı nesneleri eder geçerli ama belirsiz bir durumda yerleştirilmiş.
Bir nesnenin belirsiz bir durumdayken, hiçbir önkoşul olan nesne üzerinde herhangi bir işlem yapabilirsiniz. Eğer gerçekleştirmek istediğiniz bir ön bir işlem varsa, doğrudan nesnenin belirtilmemiş-devlet ön koşulları karşılayıp karşılamadığını bilmiyorum çünkü bu işlemi gerçekleştirebilirsiniz.
İşlemleri örneklerigenellikleön koşullar yok:
- yıkım
- atama
- inş, *, *
get
*6 7* . gibi gözlemciler
İşlemleri örneklerigenelliklene var önkoşulları:
- inceleyebilirsiniz
- pop_back
Nasıl bu C olmayan copyable nesne yapa...
Nasıl olmayan düzenlenebilir bir Combo...
eğer nesne c boş olup olmadığını kontr...
Python, nesne öznitelikleri mı?...
Bir dizi ve bir nesne arasındaki fark ...