এই নির্দিষ্ট ক্ষেত্রে প্রতিরোধের জন্য, আপনি হয় পয়েন্টার নিতে বাছাই করতে পারেন (যেহেতু Weep(&std::vector<int>{1,2,3})অনুমোদিত নয়) বা আপনি একটি অ-স্থির রেফারেন্স নিতে পারেন যা কোনও অস্থায়ী ক্ষেত্রেও ত্রুটি ঘটবে।
Woop(const std::vector<int> *nums);
Woop(std::vector<int> *nums);
Woop(std::vector<int>& nums);
এগুলি এখনও মানটি বৈধ থাকার গ্যারান্টি দেয় না, তবে কমপক্ষে সহজতম ভুলটি থামায়, অনুলিপি তৈরি করে না numsএবং একটি বিশেষ উপায়ে তৈরি করার প্রয়োজন নেই (যেমন যেমন std::shared_ptrবা std::weak_ptrআছে)।
std::scoped_lockমুটেক্সের রেফারেন্স নেওয়া একটি উদাহরণ হতে পারে এবং যেখানে অনন্য / ভাগ করা / দুর্বল পিটিআরটি সত্যই কাম্য নয়। প্রায়শই std::mutexকেবলমাত্র একটি মৌলিক সদস্য বা স্থানীয় পরিবর্তনশীল হবে। আপনাকে এখনও খুব যত্নবান হতে হবে, তবে এই ক্ষেত্রে সাধারণত আয়ু নির্ধারণ করা সহজ।
std::weak_ptrমালিকানাবিহীন হওয়ার জন্য অন্য একটি বিকল্প, তবে তারপরে আপনি কলারকে ব্যবহার করতে বাধ্য করেন shared_ptr(এবং এইভাবে এছাড়াও বরাদ্দ হিপ), এবং কখনও কখনও এটি চান না।
যদি কোনও অনুলিপি ঠিক থাকে তবে তা কেবল সমস্যাটিকে এড়িয়ে চলে।
যদি Woopমালিকানা গ্রহণ করা হয় তবে তা আর-মান হিসাবে পাস এবং সরানো (এবং পুরোপুরি পয়েন্টার / রেফারেন্সের বিষয়গুলি এড়ানো), অথবা unique_ptrআপনি যদি মানটি নিজেই স্থানান্তর করতে না পারেন বা পয়েন্টারটি বৈধ থাকতে চান তবে ব্যবহার করুন।
// the caller can't continue to use nums, they could however get `numbers` from Woop or such like
// or just let Woop only manipulate numbers directly.
Woop(std::vector<int> &&nums)
: numbers(std::move(nums)) {}
std::vector<int> numbers;
// while the caller looses the unique_ptr, they might still use a raw pointer, but be careful.
// Or again access numbers only via Woop as with the move construct above.
Woop(std::unique_ptr<std::vector<int>> &&nums)
: numbers(std::move(nums)) {}
std::unique_ptr<std::vector<int>> numbers;
অথবা যদি মালিকানা ভাগ করে নেওয়া হয় তবে আপনি shared_ptrসমস্ত কিছুর জন্য ব্যবহার করতে পারেন এবং এটি চূড়ান্ত রেফারেন্স সহ মুছে ফেলা হবে তবে এটি যদি অব্যবহৃত হয় তবে অবজেক্টের লাইফ চক্রটি ট্র্যাক করে রাখতে পারে।
std::unique_ptrএকচেটিয়া মালিকানা,std::shared_ptrবা ভাগ করে নেওয়া মালিকানার জন্য, বাstd::weak_ptrকমপক্ষে হারিয়ে যাওয়া ডেটা সনাক্ত করতে পারে)।