আপনি মানে ম্যানুয়ালি মুক্ত মেমরি, ফাইল বন্ধ, এই ধরণের জিনিস আছে? যদি তা হয় তবে আমি ন্যূনতম এবং সাধারণত আমি ব্যবহার করেছি অন্যান্য বেশিরভাগ ভাষার চেয়ে কম বলব, বিশেষত যদি আমরা কেবল এটি "মেমরি পরিচালনা" নয় "রিসোর্স ম্যানেজমেন্ট" এর জন্য সাধারণীকরণ করি। সেই অর্থে, আমি আসলে মনে করি সি ++ এর জন্য জাভা বা সি # বলুন, এর চেয়ে কম ম্যানুয়াল রিসোর্স ম্যানেজমেন্ট দরকার।
এটি মূলত সেই ধ্বংসকারীদের কারণে যা স্বয়ংক্রিয়ভাবে সংস্থানটিকে ধ্বংস করে দেয় (মেমরি বা অন্যথায়)। সাধারণত আমি কেবলমাত্র একবার সি -++ তে কোনও উত্সকে মুক্ত / ধ্বংস করতে হয় তা হল আমি যদি একটি ভল-লেভেল ডেটা স্ট্রাকচার (বেশিরভাগ লোকের কিছু করার দরকার নেই) বা সিআই এপি ব্যবহার করি যেখানে আমি কিছুটা সময় ব্যয় করি সি রিসোর্সটি মোড়ানো যা ম্যানুয়ালি মুক্ত / ধ্বংস / একটি RAII- কনফর্মিং সি ++ র্যাপারে বন্ধ করা দরকার।
অবশ্যই যদি কোনও ব্যবহারকারী কোনও চিত্র সম্পাদনা সফ্টওয়্যারটিতে একটি চিত্র বন্ধ করার জন্য অনুরোধ করে তবে আমাকে সংগ্রহ বা কিছু থেকে চিত্রটি সরিয়ে ফেলতে হবে। তবে আশাকরি এই বিষয়টিকে "মেমরি" বা "রিসোর্স" পরিচালনা হিসাবে বিবেচনা করা হয় না যা এই প্রসঙ্গে গুরুত্বপূর্ণ, যেহেতু আপনি যদি সেই সময়ের সাথে এই চিত্রটির সাথে সম্পর্কিত স্মৃতিটিকে মুক্ত করতে চান তবে কোনও ভাষায় এটি প্রয়োজন pretty তবে আবার আপনাকে যা করতে হবে তা হ'ল সংগ্রহ থেকে চিত্রটি সরিয়ে নেওয়া এবং ইমেজ ডেস্ট্রাক্টর বাকী অংশটির যত্ন নেন।
এদিকে আমি যদি জাভা বা সি # এর সাথে তুলনা করি, বলি, আপনি প্রায়শই লোককে সেখানে ম্যানুয়ালি ফাইলগুলি বন্ধ করতে, সকেটগুলি সংযোগ বিচ্ছিন্ন করতে, আবর্জনার উল্লেখগুলি নষ্টের জন্য সেটগুলি আবর্জনা সংগ্রহ করার অনুমতি দেয় ইত্যাদি সেট করে etc. আপনি যদি আমাকে জিজ্ঞাসা করেন তবে সেই ভাষাগুলিতে রিসোর্স ম্যানেজমেন্ট। সি ++ তে আপনাকে প্রায়শই unlock
নিজে নিজে একটি মুটেক্সের প্রয়োজনও হয় না , যেহেতু মিউটেক্স সুযোগের বাইরে চলে যায় তখন মুটেক্স লকারটি স্বয়ংক্রিয়ভাবে আপনার জন্য এটি করবে। উদাহরণস্বরূপ, আপনার কখনই সি ++ এ এই জাতীয় জিনিসগুলি করা উচিত নয়:
System.IO.StreamReader file = new System.IO.StreamReader(path);
try
{
file.ReadBlock(buffer, index, buffer.Length);
}
catch (System.IO.IOException e)
{
...
}
finally
{
if (file != null)
file.Close();
}
সি ++ এ ম্যানুয়ালি ফাইলগুলি বন্ধ করার মতো জিনিসগুলি করার দরকার নেই। ফলস্বরূপ বা সাধারণ বা ব্যতিক্রমী কার্যকরকরণের পথ হিসাবে তারা সুযোগের বাইরে চলে যায় না কেন তত্ক্ষণাত তারা সুযোগের বাইরে চলে যায় তত্ক্ষণাত তারা স্বয়ংক্রিয়ভাবে নিজেকে বন্ধ করে দেয়। মেমরি সম্পর্কিত সম্পদের জন্য অনুরূপ জিনিস std::vector
। file.Close()
উপরের মতো কোডগুলি প্রায়শই অস্বীকার করা হবে যেহেতু বিশেষত একটি finally
ব্লকের প্রসঙ্গে , প্রস্তাবিত হয় যে স্থানীয় সংস্থানটি ম্যানুয়ালি মুক্ত করতে হবে যখন সি ++ এর চারপাশে পুরো মানসিকতাটি স্বয়ংক্রিয়ভাবে চালিত হয়।
ম্যানুয়াল মেমরি পরিচালনার ক্ষেত্রে, আমি বলব যে সি এর জন্য সর্বোচ্চ, জাভা / সি # একটি মাঝারি পরিমাণ এবং সি ++ এর মধ্যে সর্বনিম্ন প্রয়োজন। সি ++ ব্যবহার করা কিছুটা লজ্জাজনক হওয়ার অনেক কারণ রয়েছে কারণ এটি আয়ত্ত করা খুব কঠিন ভাষা তবে মেমরি পরিচালনা তাদের মধ্যে একটি হওয়া উচিত নয়। বিপরীতে আমি আসলে এটি মনে করি এটি এই দিকটিতে এটি সবচেয়ে সহজ ভাষা।
অবশ্যই সি ++ আপনাকে ম্যানুয়ালি মেমরি বরাদ্দ operator delete/delete[]
করতে এবং ম্যানুয়ালি ফ্রি মেমরির দিকে আহ্বান করতে দেয়। এটি আপনাকে সি ফাংশনগুলি malloc
এবং এর মতো ব্যবহার করতে দেয়free
। তবে এটি প্রাচীন ধাঁচের কোডিং অনুশীলন যা আমি মনে করি যে লোকেরা creditণ দেওয়ার অনেক আগে থেকেই অচল হয়ে পড়েছিল, যেহেতু স্ট্রস্ট্রপ এমনকি প্রথম থেকেই এই শব্দটি রচনা করার আগেই আরআইআইয়ের পক্ষে ছিলেন। সুতরাং আমি এমনকি "আধুনিক সি ++" বলাই মোটামুটি মনে করি না রিসোর্স ম্যানেজমেন্টকে স্বয়ংক্রিয়ভাবে চালিত করে, কারণ এটির পাশাপাশি উদ্দেশ্যটিই মনে করা হত। আপনি অন্যথায় অন্যথায় ব্যবহারিকভাবে ব্যতিক্রম-সুরক্ষা পেতে পারেন না। এটি ঠিক যে 90 এর দশকের গোড়ার দিকে প্রচুর বিপথগামী বিকাশকারীরা সি ++ অবজেক্টের সাথে সি হিসাবে ব্যবহার করার চেষ্টা করেছিলেন, প্রায়শই ব্যতিক্রম-হ্যান্ডলিংকে পুরোপুরি উপেক্ষা করে এবং কখনও সেভাবে ব্যবহার করার কথা ছিল না। আপনি যদি সি ++ ব্যবহার করেন যা ব্যবহারিকভাবে সর্বদা ব্যবহারের নিয়ত ছিল, তবে মেমরি পরিচালনা পুরোপুরি স্বয়ংক্রিয় হয় এবং সাধারণত আপনাকে ম্যানুয়ালি মোকাবেলা করতে হবে এমন কিছু নয় (বা এর সাথে ডিল করা উচিত)।