Object this` পয়েন্টারের মান কি বস্তুর জীবদ্দশায় স্থির থাকে?


19

thisকোনও নির্দিষ্ট অবজেক্টের জীবদ্দশায় পয়েন্টারের মানটি কি স্থির থাকার গ্যারান্টিযুক্ত? আমি এমন কোনও ক্ষেত্রে কল্পনা করতে পারি না যেখানে এটি পরিবর্তিত হবে তবে আমি জানি না যে আমি কিছু মিস করছি না কি না।


4
সর্বদাthis পয়েন্টারের মান হ'ল বস্তুটির ঠিকানার মান যেখানে ফাংশনটি বলা হয়েছিল। সুতরাং প্রশ্নটির সাথে সমান 'কোনও বস্তু কি সময়ের সাথে সাথে তার স্মৃতির ঠিকানা পরিবর্তন করতে পারে?'
অ্যাকোনকাগুয়া

2
লক্ষণীয় মূল্য: যদি কেউ অনানুষ্ঠানিকভাবে জীবনকাল সম্পর্কে কথা বলে তবে যে বস্তুর মাধ্যমে স্থানান্তরিত হয় std::moveতা thisপয়েন্টার পরিবর্তন করে change আনুষ্ঠানিকভাবে আমরা বলব যে এগুলি দুটি পৃথক বস্তু, তবে অনানুষ্ঠানিকভাবে কেউ এগুলিকে "একই" হিসাবে মনে করতে পারে যা যদি মনোযোগ না দেয় তবে বিভ্রান্তি সৃষ্টি করতে পারে।
আমোমন

উত্তর:


27

thisকোনও নির্দিষ্ট অবজেক্টের জীবদ্দশায় পয়েন্টারের মানটি কি স্থির থাকার গ্যারান্টিযুক্ত?

হ্যাঁ

ব্যবহারকারী অ্যাকনকাগুয়া যেমন এটি রেখেছেন : thisপয়েন্টারের মান সর্বদা সেই বস্তুর ঠিকানার মান যেখানে ফাংশনটি 1 এ ডাকা হত । সুতরাং প্রশ্নটি এর সাথে সমান:

কোনও বস্তু কি সময়ের সাথে সাথে তার স্মৃতির ঠিকানা পরিবর্তন করতে পারে?

এটি সম্ভব নয়, lifetime2 এর সংজ্ঞা দিয়ে । কোনও অবজেক্টের জীবনকাল শুরু হয় যখন তার সঞ্চয়স্থান পাওয়া যায় বা তার পরে প্রকাশিত হয় তার আগেই শেষ হয় ends


1) [class.this]/1

একটি অ-স্ট্যাটিক (দেহের [class.mfct]) সদস্য ফাংশন, শব্দ thisএকটি হল prvalue যার মানকে বস্তুর যার জন্য ফাংশন বলা হয় একটি পয়েন্টার।

2) [basic.life]/1 (জোর আমার)

কোনও অবজেক্ট বা রেফারেন্সের জীবনকাল হ'ল অবজেক্ট বা রেফারেন্সের একটি রানটাইম সম্পত্তি। কোনও ভেরিয়েবলের শূন্য সূচনা হয় বলে যদি এটি ডিফল্ট-আরম্ভ হয় এবং এটি শ্রেণীর ধরণের বা একটি (সম্ভবত বহুমাত্রিক) অ্যারের হয় তবে সেই শ্রেণীর ধরণের একটি তুচ্ছ ডিফল্ট কনস্ট্রাক্টর থাকে। টাইপের কোনও অবজেক্টের জীবনকাল Tশুরু হয় যখন :

  • প্রকারের জন্যT উপযুক্ত প্রান্তিককরণ এবং আকার সহ স্টোরেজ পাওয়া যায় এবং
  • এর সূচনা (যদি থাকে) সম্পূর্ণ (শূন্য প্রারম্ভিককরণ সহ) ( [dcl.init]) সম্পূর্ণ হয় তবে বস্তুটি কোনও ইউনিয়নের সদস্য বা সাব-সাবজেক্ট হয়ে থাকলে তার আজীবন কেবল তখনই শুরু হয় যদি সেই ইউনিয়নের সদস্য ইউনিয়নের ( [dcl.init.aggr], [class.base.init]) আদ্যক্ষর সদস্য হয় বা হিসাবে বর্ণিত [class.union]

oটাইপের কোনও অবজেক্টের জীবনকাল Tশেষ হয় যখন :

  • যদি Tকোনও শ্রেণিহীন প্রকার হয় তবে অবজেক্টটি ধ্বংস হয়ে যায়, বা
  • যদি Tএটি কোনও শ্রেণীর ধরণের হয় তবে ধ্বংসকারী কল শুরু হয়, বা or
  • অবজেক্টটি যে স্টোরেজটি দখল করে সেটিকে মুক্তি দেওয়া হয় , বা এমন কোনও বস্তুর দ্বারা পুনরায় ব্যবহার করা হয় যা o( [intro.object]) এর মধ্যে বাসা বাঁধে না ।

এর অর্থ কি এই যে C ++ প্রোগ্রামের জন্য স্বয়ংক্রিয় মেমরির কমপ্যাকশনটি প্রয়োগ করা যথেষ্ট জটিল রানটাইম পক্ষে অসম্ভব (অবৈধ) হবে? বা এর অর্থ কি কেবল এই যে এটি "যেমন-তেমন" আচরণ করা প্রয়োজন, যাতে thisপ্রতিটি সময় একই মূল্য প্রদান করা যায় , গাদা গতিবিধি নির্বিশেষে?
আলেকজান্ডার - মনিকা

2
@ অ্যালেক্স স্পষ্টভাবে যেমন-বিধি বিরাজ করে। সর্বদা.
ওয়াইএসসি

1
@ আলেকজান্ডার-রেইনস্টেটমোনিকা এই ভেটেবলটি একটি অনুরূপ ধারণা যা কার্যকারিতা হ্রাস করে, তবে এটি গ্রহণযোগ্যতা যেহেতু সুবিধাগুলি লোকসানের চেয়ে বেশি। আধুনিক প্রসেসরগুলি ইন্ডিয়ারেশন সহ সত্যই দক্ষ।
মার্ক রান্সম

1
@ মারকআরনসাম " একটি পয়েন্টার যা কোনও বস্তুর ঠিকানা হতে গ্যারান্টিযুক্ত, বা সংকলকটি কোনও ইন্ডিয়ারেশনের স্তর যুক্ত করতে পারে? " সংজ্ঞা অনুসারে পিটিআরটি কোনও বস্তুর ঠিকানা, তবে "ঠিকানা" একটি উচ্চ স্তরের বিমূর্ত ধারণা হতে পারে । তবে তারপরে আপনি যদি নির্দেশনা প্রবর্তন করেন, আপনার পারমাণবিকতা প্রয়োজন, আপনার লকিং দরকার, কোনও থ্রड থাকলে আপনার যে কোনও অবজেক্টের সমস্ত অ্যাক্সেসগুলিতে অতিরিক্ত কাজ একগুচ্ছ প্রয়োজন। কেবল এটির চেহারা এবং অনুভূতি দ্বারা আমি এটি অকার্যকর করতে পারি (এবং আমি এমনকি সি / সি ++ ডাবলটিকে নিম্ন স্তরের ভাষা হিসাবে বিবেচনা করি নি)।
কৌতূহলী

1
@ কুরিয়াসগুয়ে আপনি ভাল পয়েন্ট করেছেন এবং আমি আর যুক্তি দিচ্ছি না যে নির্দেশনাটি ব্যবহারিক হবে। এটি এখনও একটি ভাল চিন্তার পরীক্ষা করে তোলে।
মার্ক রান্সম

8

একটি বস্তুর স্টোরেজের অঞ্চল রয়েছে। thisসেখানে পয়েন্ট।

[intro.object]/1

কোনও অবজেক্ট তার নির্মাণকালীন ( [class.cdtor]), তার জীবদ্দশায় এবং ধ্বংসের সময়কালে ( ) সংরক্ষণের একটি অঞ্চল দখল করে [class.cdtor]


-1

thisপ্রোগ্রামটি যদি কখনও এটি পড়ে তবে এর মানটি স্থিতিশীল হওয়ার গ্যারান্টিযুক্ত, পরবর্তী সময়ে যদি পড়ার মানটির কিছু বিট আবর্জনা সংগ্রহ করা অসম্ভব বা পরে যদি পাঠ্য মানের কিছু বিট প্রোগ্রামের বাইরে পালিয়ে যায়। অন্য সমস্ত ক্ষেত্রে এটি শ্রিডিনগার বিড়ালের মতো আচরণ করে, এটি একই সময়ে স্থির এবং পরিবর্তনশীল।


দুঃখিত, একদম বুঝতে পারি না প্রোগ্রামের বাইরে জঞ্জাল সংগ্রহ এবং পালানো কী ?
ড্যানিয়েল ল্যাঙ্গার

@ ড্যানিয়েলল্যাঙ্গার শনাক্তকারীটির মানটির বিটthis
অ্যাটমসাইবোল

এটি আমার প্রশ্নের উত্তর দেয় না। আবর্জনা কিছু বিট সংগ্রহ কি? বা প্রোগ্রামের বাইরে তাদের পালাতে?
ড্যানিয়েল ল্যাঙ্গার

@ ড্যানিয়েল ল্যাঙ্গর একটি ছোট টুকরো টেক্সটটিতে ব্যাখ্যা করা শক্ত
অ্যাটমসিম্বল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.