unique_ptr<T>
kopya oluşturmaya izin vermez, bunun yerine taşıma semantiğini destekler. Yine de, unique_ptr<T>
bir işlevden bir geri dönebilir ve döndürülen değeri bir değişkene atayabilirim.
#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 istendiği gibi derlenir ve çalışır. Peki bu satır 1
kopya oluşturucuyu çağırmıyor ve derleyici hatalarına neden olmuyor? Eğer hat 2
kullanmak zorunda olsaydım, bu mantıklı olurdu (hat 2
çalışmalarını da kullanmak , ama bunu yapmak zorunda değiliz).
C ++ 0x, bu değer istisna unique_ptr
, işlev çıkar çıkmaz yok edilecek geçici bir nesne olduğundan izin verir , böylece döndürülen işaretçinin benzersizliğini garanti eder. Bunun nasıl uygulandığını merak ediyorum, derleyicide özel olarak kaplanmış mı yoksa dil spesifikasyonunda bu istismarın başka bir maddesi var mı?
unique_ptr
. Bütün mesele 1 ve 2 hakkında aynı şeyi başarmanın iki farklı yolu.
main
işlev çıktıktan sonra gerçekleştirilir , ancak çıkıştan sonra gerçekleşmez foo
.