SORU
11 AĞUSTOS 2011, PERŞEMBE


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
11 AĞUSTOS 2011, PERŞEMBE


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

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Friday Night Cranks

    Friday Night

    27 Mayıs 2007
  • metallmanutza13

    metallmanutz

    13 NİSAN 2007
  • Rachel Raum

    Rachel Raum

    10 EYLÜL 2007