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
পাশাপাশি কাজ করে তবে আমাদের এটি করার প্রয়োজন হয় না)।
আমি জানি সি ++ 0 এক্স এই ব্যতিক্রমটিকে মঞ্জুরি দেয় unique_ptr
কারণ যেহেতু রিটার্ন মান একটি অস্থায়ী বস্তু যা ফাংশনটি বেরিয়ে আসার সাথে সাথেই ধ্বংস হয়ে যায়, সুতরাং প্রত্যাবর্তকের পয়েন্টারের স্বতন্ত্রতার গ্যারান্টি দেয়। এটি কীভাবে বাস্তবায়িত হয় সে সম্পর্কে আমি কৌতূহল বোধ করি, এটি কি সংকলকটিতে বিশেষ বিশেষভাবে তৈরি করা হয়েছে বা ভাষা ব্যবহারের ক্ষেত্রে অন্য কোনও ধারা রয়েছে যা এটি ব্যবহার করে?
unique_ptr
। পুরো প্রশ্নটি প্রায় 1 এবং 2 একই জিনিস অর্জনের দুটি ভিন্ন উপায়।
main
ফাংশন থেকে বেরিয়ে যাওয়ার পরে সঞ্চালিত হয় , তবে যখন foo
প্রস্থান হয় না।