unique_ptr<T>
ไม่อนุญาตการสร้างสำเนา แต่จะรองรับซีแมนทิกส์ของการย้าย แต่ฉันสามารถคืนค่าunique_ptr<T>
จากฟังก์ชันและกำหนดค่าที่ส่งคืนให้กับตัวแปรได้
#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;
}
รหัสข้างต้นรวบรวมและทำงานตามที่ตั้งใจไว้ ดังนั้นบรรทัด1
นั้นจะไม่เรียกใช้ตัวสร้างการคัดลอกและทำให้เกิดข้อผิดพลาดของคอมไพเลอร์อย่างไร ถ้าฉันต้องใช้ไลน์2
แทนมันก็สมเหตุสมผลดี (การใช้2
งานไลน์ก็เช่นกัน แต่เราไม่จำเป็นต้องทำเช่นนั้น)
ฉันรู้ว่า C ++ 0x อนุญาตให้มีข้อยกเว้นนี้unique_ptr
เนื่องจากค่าส่งคืนเป็นวัตถุชั่วคราวที่จะถูกทำลายทันทีที่ออกจากฟังก์ชั่นดังนั้นจึงรับประกันความเป็นเอกลักษณ์ของตัวชี้ที่ส่งคืน ฉันอยากรู้เกี่ยวกับวิธีการใช้งานนี้มันเป็นกรณีพิเศษในคอมไพเลอร์หรือมีข้ออื่น ๆ ในข้อกำหนดภาษาที่หาประโยชน์ได้หรือไม่
unique_ptr
พวกเขาทั้งสองผ่านการเป็นเจ้าของ คำถามทั้งหมดเกี่ยวกับ 1 และ 2 เป็นสองวิธีที่แตกต่างกันในการบรรลุสิ่งเดียวกัน
main
ออกจากฟังก์ชัน แต่ไม่ใช่เมื่อfoo
ออก