আপনি সি ++ অবহিত (বিশেষভাবে প্রয়োজন std::vector) যে আপনার পদক্ষেপ কন্সট্রাকটর এবং বিনাশকারী ব্যবহার করে, নিক্ষেপ না noexcept। তারপরে ভেক্টর বড় হওয়ার সাথে সাথে মুভ কনস্ট্রাক্টরকে ডাকা হবে।
এইভাবে সম্মতিযুক্ত একটি মুভি কনডাক্টরকে ঘোষণা এবং প্রয়োগ করতে হয় std::vector:
A(A && rhs) noexcept {
std::cout << "i am the move constr" <<std::endl;
... some code doing the move ...
m_value=std::move(rhs.m_value) ;
}
যদি কনস্ট্রাক্টর না হয় noexcept,std::vector এটা ব্যবহার করতে পারবেন না, যেহেতু তারপর, এটা মান দ্বারা দাবি ব্যতিক্রম গ্যারান্টী নিশ্চিত করতে পারবে না।
স্ট্যান্ডার্ডে কী বলা হয়েছে সে সম্পর্কে আরও তথ্যের জন্য,
সি ++ সরান শব্দার্থবিজ্ঞান এবং ব্যতিক্রমগুলি পড়ুন
বো এর কাছে ক্রেডিট যিনি ইঙ্গিত দিয়েছিলেন যে এটি ব্যতিক্রমগুলি সহ করতে পারে। কেরেক এসবির পরামর্শ বিবেচনা করুন এবং emplace_backসম্ভব হলে ব্যবহার করুন । এটা তোলে করতে দ্রুত (কিন্তু প্রায়ই নয়), এটা পরিষ্কার এবং আরো কম্প্যাক্ট হতে পারে, কিন্তু এছাড়াও আছে কিছু ফাঁদ (বিশেষ করে অ স্পষ্ট কনস্ট্রাকটর সঙ্গে) হয়।
সম্পাদনা করুন , প্রায়শই ডিফল্ট আপনি যা চান তা হ'ল: সরানো যায় এমন সমস্ত কিছু সরিয়ে দিন, বাকীটি অনুলিপি করুন। স্পষ্টভাবে এর জন্য জিজ্ঞাসা করতে, লিখুন
A(A && rhs) = default;
এটি করে আপনি যখন সম্ভব সম্ভব নন: ডিফল্ট মুভ কনস্ট্রাক্টরকে নোসেপ্ট হিসাবে সংজ্ঞায়িত করা হয় কি?
নোট করুন যে ভিজ্যুয়াল স্টুডিও 2015 এর প্রাথমিক সংস্করণগুলি এর পুরানো সংস্করণগুলিকে সমর্থন করলেও এটি সমর্থন করে না।