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
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.
Dönen ilk x dizi öğeleri...
Dönen IEnumerable<T> vs IQueryab...
BitmapFactory.decodeStream seçenekleri...
Rastgele bir boolean değer dönen en iy...
Dönen ve Aralık ggplot2 eksen etiketle...