SORU
30 Kasım 2010, Salı


Dönen işlevler unique_ptr

unique_ptr<T> kopyasını inşa edilmesine izin vermiyor, bunun yerine hareket semantiği destekler. Yine de, bir fonksiyon unique_ptr<T> bir dönüş ve bir değişkeni döndürülen değer görevlendirebilirim.

#include <iostream>
#include <memory>

using namespace std;

unique_ptr<int> foo()
{
  unique_ptr<int> p( new int(10) );

  return p;                   // 1
  //return move( p );         // 2
}

int main()
{
  unique_ptr<int> p = foo();

  cout << *p << endl;
  return 0;
}

Yukarıdaki kod derler ve beklendiği gibi çalışır. Nasıl 1 kopya kurucu çağırmak ve derleyici hataları neden olmadığını satır mı? Eğer satır 2 kullanmak yerine olsaydım anlamda (satır 2 gibi çalışır, ancak bunu yapmak zorunda değiliz kullanarak) olur.

C 0x bu durum dönüş değeri olarak yakında işlev çıkar, böylece döndürülen işaretçi benzersizliğini garanti yok olacak geçici bir nesne olduğundan 7 ** biliyorum. Bu nasıl uygulanır merak ediyorum, derleyici özel kasalı veya bu açıkları dil belirtimi içinde başka bir madde var mı?

CEVAP
30 Kasım 2010, Salı


bu yararlanan dil belirtimi içinde başka bir madde var mı?

Evet, 12.8 §34 ve madde 35

Belli kriterler yerine geldiğinde, bir uygulama sınıfı nesnesinin kopyala/taşı yapımı atlamak için izin [...] Kopyala/taşı işlemleri bu elision, denirelision kopyalayınizin [...] sınıf, dönüş türü ile fonksiyon return ifadesi yer aldıifade adıdır zaman uçucu olmayan otomatik bir nesnefonksiyon dönüş türü olarak cv-niteleyici olmayan aynı tip [...]

Kopyalama işlemiyle elision için Şartlar ve kopyalanacak nesnenin bir lvalue tarafından belirtilen zaman kopya için yapıcı seçmek için tekrar yükleme çözümlemesi yapılıreğer nesne bir rvalue tarafından belirlenmiş gibi.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Evan Coury

    Evan Coury

    29 NİSAN 2007
  • Menglong Tav

    Menglong Tav

    18 Temmuz 2010
  • Paste Magazine

    Paste Magazi

    28 AĞUSTOS 2008