কর্টর এবং অ্যাসাইনমেন্টটি ব্যক্তিগত করে (বা সেগুলিকে সি ++ এ মুছুন হিসাবে ঘোষণা করে) অনুলিপিটি অক্ষম করুন।
এখানে পয়েন্টটি যেখানে আপনাকে এটি করতে হবে। আপনার কোড সহ থাকার জন্য, আইএবস্ট্রাক্ট কোনও সমস্যা নয়। (মনে রাখবেন যে আপনি যা করেছেন তা করছেন, আপনি *a1
IAbstract
সাবোবজেক্টটি a2 তে অর্পণ করেছেন , কোনও রেফারেন্স হারিয়েছেন ue Derived
ভ্যালু অ্যাসাইনমেন্টটি বহুরূপী নয়)
বিষয়টি নিয়ে আসে Derived::theproblem
। অন্যের মধ্যে ডেরিভড অনুলিপি করা আসলে এমন *theproblem
ডেটা ভাগ করতে পারে যা ভাগ করে নেওয়ার জন্য নকশাকৃত নাও হতে পারে (এমন দুটি উদাহরণ রয়েছে যা delete theproblem
তাদের ধ্বংসকারীকে কল করতে পারে )।
যদি তা কেস হয় তবে Derived
এটি অবশ্যই অনুলিপিযোগ্য এবং অ্যাসাইয়েবল নয়। অবশ্যই, যদি আপনি অনুলিপিটি ব্যক্তিগতভাবে তৈরি করেন IAbstract
, যেহেতু Derived
এটির জন্য ডিফল্ট অনুলিপি প্রয়োজন হয় তবে Derived
তা অনুলিপিযোগ্যও হবে না। তবে আপনি যদি অনুলিপি Derived::Derived(const Derived&)
কল না করে নিজের নিজস্ব সংজ্ঞা দেন তবে আপনি IAbtract
সেগুলি অনুলিপি করতে পারেন।
সমস্যাটি ডারাইভেডে রয়েছে এবং সমাধানটি অবশ্যই ডারাইভের মধ্যে থাকতে হবে: যদি এটি কেবলমাত্র পয়েন্টার বা রেফারেন্স দ্বারা অ্যাক্সেস করা একটি গতিশীল-কেবলমাত্র বস্তু হয় তবে এটি নিজেই প্রাপ্ত হওয়া উচিত
class Derived
{
...
Derived(const Derived&) = delete;
Derived& operator=(const Derived&) = delete;
};
মূলত ডাইরাইভ শ্রেণীর ডিজাইনার (এটি ডেরাইভড কীভাবে কাজ করে এবং কীভাবে theproblem
পরিচালিত হয় তা জেনে রাখা উচিত ) অ্যাসাইনমেন্ট এবং অনুলিপি সহ কী করবেন তা সিদ্ধান্ত নিতে হবে।