c++ - উনল - একটি সি++ ফাংশন একটি স্ট্যাটিক পরিবর্তনশীল জীবনকাল কি?




সি++ বই (3)

FWIW, কোডগিয়ার সি ++ নির্মাতা মান অনুযায়ী প্রত্যাশিত ক্রম ধ্বংস না।

C:\> sample.exe 1 2
Created in foo
Created in if
Destroyed in foo
Destroyed in if

... ধ্বংসের আদেশের উপর নির্ভর করার জন্য আরেকটি কারণ!

একটি পরিবর্তনশীল একটি ফাংশন এর সুযোগ static হিসাবে ঘোষণা করা হয়, এটি শুধুমাত্র একবার শুরু এবং ফাংশন কল মধ্যে তার মান বজায় রাখা হয়। ঠিক তার জীবনকাল কি? যখন তার কন্সট্রাকটর এবং ধ্বংসকারী বলা হয়?

void foo() 
{ 
    static string plonk = "When will I die?";
}

Motti আদেশ সম্পর্কে সঠিক, কিন্তু কিছু অন্যান্য বিষয় বিবেচনা করা আছে:

স্থানীয় স্ট্যাটিকগুলি ইতোমধ্যেই শুরু করা হয়েছে কিনা তা নির্দেশ করার জন্য কম্পাইলারগুলি সাধারণত একটি লুকানো পতাকা পরিবর্তনশীল ব্যবহার করে এবং এই পতাকাটি ফাংশনে প্রতিটি এন্ট্রিতে চেক করা হয়। স্পষ্টতই এটি একটি ছোট পারফরম্যান্সের আঘাত, তবে কোনও উদ্বেগের বিষয় হল এই পতাকাটি থ্রেড-নিরাপদ হওয়ার নিশ্চয়তা দেয় না।

যদি আপনার উপরে থাকা স্থানীয় স্ট্যাটিক থাকে এবং একাধিক থ্রেড থেকে 'foo' বলা হয়, তবে আপনার 'প্লনক' ভুল বা এমনকি একাধিকবার সূচনা হতে পারে এমন বর্ণের শর্ত থাকতে পারে। এছাড়াও, এই ক্ষেত্রে 'Plonk' এটি নির্মিত যে একটি তুলনায় একটি ভিন্ন থ্রেড দ্বারা ধ্বংস করা হতে পারে।

স্ট্যান্ডার্ড বলার সত্ত্বেও, আমি স্থানীয় স্ট্যাটিক ধ্বংসের প্রকৃত ক্রম সম্পর্কে খুব সচেতন হব, কারণ এটি সম্ভবত সম্ভব যে স্ট্যাটিকটি এখনও ধ্বংস হয়ে যাওয়ার পরেও বৈধতার উপর নির্ভর করতে পারে এবং এটি ট্র্যাক করা সত্যিই কঠিন।


বিদ্যমান ব্যাখ্যা প্রকৃতপক্ষে স্ট্যান্ডার্ড থেকে প্রকৃত নিয়ম ছাড়া সম্পূর্ণ হয় না, পাওয়া 6.7:

স্ট্যাটিক স্টোরেজ সময়কাল বা থ্রেড স্টোরেজ সময়সীমার সাথে সমস্ত ব্লক-স্কোপ ভেরিয়েবলের শূন্য-ইনিশিয়ালাইজেশন অন্য কোনো সূচনা হওয়ার আগে সঞ্চালিত হয়। স্ট্যাটিক স্টোরেজ সময়সীমার সাথে একটি ব্লক-স্কোপ অ্যাসিটির ক্রমাগত সূচনা, যদি প্রযোজ্য হয়, তার ব্লকটি প্রথমে প্রবেশ করার আগে সঞ্চালিত হয়। একই অবস্থার অধীনে স্ট্যাটিক বা থ্রেড স্টোরেজ স্থিতির সাথে অন্যান্য ব্লক-স্কোপ ভেরিয়েবলের প্রাথমিক সূচনাটি কার্যকর করার জন্য একটি বাস্তবায়নকে কার্যকর করা হয় যা বাস্তবায়নকে স্থিরভাবে নামস্থান স্পেসে স্ট্যাটিক বা থ্রেড স্টোরেজ স্থিতির সাথে একটি পরিবর্তনশীল সূচনা করার অনুমতি দেয়। অন্যথা এই ধরনের একটি পরিবর্তনশীল প্রথমবারের মতো নিয়ন্ত্রণ ঘোষণা করে তার ঘোষণার মাধ্যমে পাস করে; যেমন একটি পরিবর্তনশীল তার সূচনা সমাপ্তির উপর প্রাথমিকভাবে বিবেচনা করা হয়। যদি কোনও ব্যতিক্রম নিক্ষেপ করে প্রারম্ভিকতা প্রস্থান হয় তবে সূচনাটি সম্পন্ন হয় না, তাই পরবর্তী সময়ে এটি পুনরায় ঘোষণা করা হবে যখন ঘোষণাটি ঘোষণাটি প্রবেশ করে। ভেরিয়েবল চালু হওয়ার সময় কন্ট্রোলটি একযোগে অ্যাক্সেসে প্রবেশ করে তবে সমবায় এক্সিকিউশন শুরু হওয়ার জন্য অপেক্ষা করবে। যদি পরিবর্তনশীলটি চালু করা হয় তবে কন্ট্রোলটি পুনরাবৃত্তিমূলকভাবে পুনরায় প্রবেশ করে, তখন আচরণটি অনির্ধারিত হয়।





lifetime