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

  • DigitalRev TV

    DigitalRev T

    30 AĞUSTOS 2007
  • Evan Coury

    Evan Coury

    29 NİSAN 2007
  • paikimchung

    paikimchung

    12 Mayıs 2006