আমি ভাবছি যে অনুলিপি অনুলিপি কি সম্ভব মেধা আছে? স্বাভাবিকভাবেই, আমি ব্যক্তিগত মতামত প্রত্যাশা করি না, তবে বাস্তব-বিশ্বের ব্যবহারিক পরিস্থিতি যেখানে এটি একটি বাস্তব উপায়ে প্রযুক্তিগত এবং ব্যবহারিকভাবে উপকারী হতে পারে। এবং স্পষ্টতই আমি আপনাকে একটি &
চরিত্রের টাইপিং সংরক্ষণের চেয়ে আরও কিছু বোঝাতে চাইছি ।
স্পষ্ট করার জন্য, এই প্রশ্নটি ডেটাটাইপসের প্রসঙ্গে, যেখানে অ্যাসাইনমেন্ট বা অনুলিপি নির্মাণ একটি অন্তর্নিহিত অগভীর অনুলিপি তৈরি করে, তবে এতে পরিবর্তনগুলি একটি অন্তর্নিহিত গভীর অনুলিপি তৈরি করে এবং মূল বস্তুর পরিবর্তে এতে পরিবর্তনগুলি প্রয়োগ করে।
আমি জিজ্ঞাসা করার কারণটি হ'ল আমি ডিফল্ট অন্তর্নিহিত আচরণ হিসাবে COW থাকার কোনও গুণ খুঁজে পাচ্ছি না। আমি কিউটি ব্যবহার করি, যা প্রচুর ডেটাটাইপগুলির জন্য COW বাস্তবায়িত করেছে, প্রায়োগিকভাবে যা কিছু অন্তর্নিহিত গতিশীল বরাদ্দকৃত সঞ্চয়স্থান রয়েছে all তবে কীভাবে এটি ব্যবহারকারীর উপকারে আসে?
একটি উদাহরণ:
QString s("some text");
QString s1 = s; // now both s and s1 internally use the same resource
qDebug() << s1; // const operation, nothing changes
s1[o] = z; // s1 "detaches" from s, allocates new storage and modifies first character
// s is still "some text"
এই উদাহরণে COW ব্যবহার করে আমরা কী জিততে পারি?
তাহলে আমরা কি সব মনস্থ করা ব্যবহার const অপারেশন হয়, s1
অপ্রয়োজনীয়, ভাল ব্যবহার পারে s
।
যদি আমরা মানটি পরিবর্তন করতে চাই, তবে COW কেবলমাত্র প্রথম অ-কনস্ট্রেট অপারেশন পর্যন্ত রিসোর্স অনুলিপিটি বিলম্ব করে, ভাগ করে নেওয়া স্টোরেজ থেকে অন্তর্ভুক্ত শেয়ারিং এবং বিচ্ছিন্নকরণের জন্য রেফ কাউন্ট বাড়ানোর জন্য (সর্বনিম্ন হলেও) ব্যয় করে। দেখে মনে হচ্ছে যে COW এর সাথে জড়িত সমস্ত ওভারহেড অর্থহীন।
এটি প্যারামিটার পাসের প্রসঙ্গে খুব বেশি আলাদা নয় - যদি আপনি মানটি পরিবর্তন করতে চান না, কনস্ট্রাক্ট রেফারেন্স হিসাবে পাস করুন, আপনি যদি সংশোধন করতে চান না, আপনি হয় পরিবর্তিত করতে না চাইলে একটি অন্তর্নিহিত গভীর অনুলিপি তৈরি করুন মূল অবজেক্ট, বা আপনি যদি এটি পরিবর্তন করতে চান তবে রেফারেন্স দিয়ে পাস করুন। আবার COW অপ্রয়োজনীয় ওভারহেডের মতো মনে হয় যা কিছু অর্জন করে না এবং কেবল একটি সীমাবদ্ধতা যুক্ত করে যে আপনি চাইলেও মূল মানটি পরিবর্তন করতে পারবেন না, যেহেতু কোনও পরিবর্তন আসল বস্তু থেকে বিচ্ছিন্ন হয়ে যাবে।
সুতরাং আপনি COW সম্পর্কে জানেন বা এটি সম্পর্কে অবহেলিত কিনা তার উপর নির্ভর করে এটি হয় অস্পষ্ট অভিপ্রায় এবং অপ্রয়োজনীয় ওভারহেডের কোডের ফলে বা সম্পূর্ণ বিভ্রান্তিকর আচরণের ফলে প্রত্যাশাগুলির সাথে মেলে না এবং আপনার মাথা চুলকায় leaves
আমার কাছে এটি মনে হয় যে আপনি একটি অপ্রয়োজনীয় গভীর অনুলিপি এড়াতে চান, বা আপনি এটি তৈরি করার ইচ্ছা নিয়েছেন কিনা আরও দক্ষ এবং আরও পঠনযোগ্য সমাধান রয়েছে। তাহলে কোথায় COW এর ব্যবহারিক সুবিধা পাওয়া যায়? আমি ধরে নিই যে এরকম জনপ্রিয় এবং শক্তিশালী কাঠামোর ক্ষেত্রে এটির কিছুটা সুবিধা থাকতে হবে।
তদ্ব্যতীত, আমি যা পড়েছি তা থেকে এখন CO + স্পষ্টভাবে C ++ স্ট্যান্ডার্ড লাইব্রেরিতে নিষিদ্ধ করা হয়েছে। আমি জানি না যে কন এর সাথে আমি এর দেখতে পাচ্ছি এর সাথে কিছু করার আছে, তবে উভয় উপায়েই অবশ্যই এর কারণ থাকতে হবে।
[]
অপারেটর ব্যবহার না করেই । সুতরাং COW খারাপ নকশা সক্ষম করে - এটি কোনও উপকারের মতো শোনাচ্ছে না :) শেষ অনুচ্ছেদে বিন্দুটি বৈধ বলে মনে হচ্ছে, তবে আমি নিজেও অন্তর্নিহিত আচরণের খুব ভাল অনুরাগী নই - লোকেরা এটি মঞ্জুর করার ঝোঁক নেয়, এবং তারপরেও কোড কেন আশানুরূপ কাজ করে না তা নির্ণয় করা এবং এই অন্তর্নিহিত আচরণের পিছনে কী লুকানো আছে তা পরীক্ষা না করা পর্যন্ত তারা অবাক হয়ে ভাবছেন।