যুক্তি হিসাবে ভাগ করা পয়েন্টারগুলি পাস করা


89

যদি আমি একটি ভাগ করা পয়েন্টারে মোড়ানো কোনও বিষয় ঘোষণা করি:

std::shared_ptr<myClass> myClassObject(new myClass());

তখন আমি এটি কোনও পদ্ধতির আর্গুমেন্ট হিসাবে পাস করতে চেয়েছিলাম:

DoSomething(myClassObject);

//the called method
void DoSomething(std::shared_ptr<myClass> arg1)
{
   arg1->someField = 4;
}

উপরেরগুলি কি কেবল শেয়ারড_পিটের রেফারেন্স গণনা বৃদ্ধি করে এবং সবকিছু দুর্দান্ত? বা এটি একটি ঝুঁকিপূর্ণ পয়েন্টার ছেড়ে যায়?

আপনি কি এখনও এটি করার কথা??

DoSomething(myClassObject.Get());

void DoSomething(std::shared_ptr<myClass>* arg1)
{
   (*arg1)->someField = 4;
}

আমি মনে করি যে ২ য় উপায়টি আরও কার্যকর হতে পারে কারণ এটিতে কেবল 1 ঠিকানা অনুলিপি করতে হবে (পুরো স্মার্ট পয়েন্টারের বিপরীতে), তবে 1 ম উপায়টি আরও বেশি পঠনযোগ্য বলে মনে হচ্ছে এবং আমি কার্য সম্পাদনের সীমাটি প্রত্যাশা করি না। আমি এটি নিশ্চিত করতে চাই যে এটি সম্পর্কে বিপজ্জনক কিছু নেই।

ধন্যবাদ.


14
const std::shared_ptr<myClass>& arg1
ক্যাপ্টেন ওভলিয়াস

4
দ্বিতীয় উপায়টি নষ্ট হয়ে গেছে, মালিকানা ভাগ করতে যদি আপনার ফাংশনটির প্রয়োজন হয় তবে প্রথমটি হ'ল মূর্তিমান। কিন্তু, DoSomethingমালিকানা ভাগ করে নেওয়ার দরকার কি? দেখে মনে হচ্ছে এটি পরিবর্তে কেবল একটি রেফারেন্স নেওয়া উচিত ...
iljarn

8
@ স্টিভএহ: এটি না, তবে যদি আপনার ফাংশনটি কেন এটির কলকারীদের উপর বিশেষ অবজেক্টের মালিকানা শব্দার্থবিজ্ঞানের বাধ্যতামূলক করা উচিত তবে যদি এটির প্রয়োজন না হয়? আপনার ফাংশন এমন কিছু করে না যা এর চেয়ে ভাল হবে না void DoSomething(myClass& arg1)
iljarn

4
@ স্টিভএইচ: স্মার্ট পয়েন্টারগুলির সম্পূর্ণ উদ্দেশ্য হ'ল সাধারণ অবজেক্টের মালিকানা সম্পর্কিত সমস্যাগুলি সমাধান করা - আপনার যদি সেগুলি না থাকে তবে আপনার প্রথমে স্মার্ট পয়েন্টার ব্যবহার করা উচিত নয়। ; -] shared_ptr<>বিশেষত হিসাবে , মালিকানা ভাগ করতে আপনাকে অবশ্যই মূল্য দিয়ে যেতে হবে।
iljarn

4
সম্পর্কিত নয়: সাধারণভাবে, std::make_sharedকেবলমাত্র দক্ষ নয়, তবে এটি নির্মাণকারীর চেয়েও নিরাপদstd::shared_ptr
আর মার্টিনহো ফার্নান্দেস

উত্তর:


171

আমি একটি ফাংশনে একটি ভাগ করা পয়েন্টারটি পাস করতে চাই। আপনি কি আমাকে সাহায্য করতে পারেন?

অবশ্যই, আমি আপনাকে এটি সাহায্য করতে পারেন। আমি ধরে নিলাম সি ++ এ আপনার মালিকানা শব্দার্থ সম্পর্কে কিছুটা বোঝাপড়া আছে। এটা কি সত্যি?

হ্যাঁ, আমি বিষয়টিতে যুক্তিসঙ্গতভাবে আরামদায়ক।

ভাল.

ঠিক আছে, আমি একটি shared_ptrযুক্তি নেওয়ার জন্য কেবল দুটি কারণ সম্পর্কে চিন্তা করতে পারি :

  1. ফাংশনটি অবজেক্টের মালিকানা ভাগ করতে চায়;
  2. ফাংশনটি কিছু অপারেশন করে যা বিশেষত shared_ptrএসগুলিতে কাজ করে ।

আপনি কোনটি সম্পর্কে আগ্রহী?

আমি একটি সাধারণ উত্তর খুঁজছি, তাই আমি উভয়ই সম্পর্কে আগ্রহী। যদিও আপনি # 2 এর ক্ষেত্রে কী বোঝাতে চাইছেন তা সম্পর্কে আমি আগ্রহী।

এই জাতীয় ফাংশনগুলির উদাহরণগুলির মধ্যে রয়েছে std::static_pointer_cast, কাস্টম তুলকগুলি বা পূর্বাভাস। উদাহরণস্বরূপ, যদি আপনাকে কোনও ভেক্টর থেকে সমস্ত অনন্য শেয়ারড_পিটার খুঁজে পেতে হয় তবে আপনার এ জাতীয় একটি প্রাকটিকের প্রয়োজন।

আহ, যখন ফাংশনটি আসলে স্মার্ট পয়েন্টারটি নিজেই পরিচালনা করে।

হুবহু

সেক্ষেত্রে, আমি মনে করি আমাদের রেফারেন্স দিয়ে পাস করা উচিত।

হ্যাঁ. এবং যদি এটি পয়েন্টারটি পরিবর্তন না করে তবে আপনি কনস্টেন্ট রেফারেন্স দিয়ে যেতে চান। আপনার মালিকানা ভাগ করার প্রয়োজন নেই বলে অনুলিপি করার দরকার নেই। এটাই অন্য পরিস্থিতি।

ঠিক আছে বুঝেছি. অন্যান্য দৃশ্যের কথা বলা যাক।

আপনি যেখানে মালিকানা ভাগ? ঠিক আছে. আপনি কীভাবে এর সাথে মালিকানা ভাগ করবেন shared_ptr?

কপি করে।

তাহলে ফাংশনটির একটি অনুলিপি তৈরি করা দরকার shared_ptr?

স্পষ্টতই। সুতরাং আমি কনস্টের একটি রেফারেন্স দিয়ে এটি পাস এবং একটি স্থানীয় ভেরিয়েবল অনুলিপি?

না, এটি হতাশাব্যঞ্জক। যদি এটি রেফারেন্স দিয়ে পাস হয় তবে ফাংশনটির ম্যানুয়ালি অনুলিপি তৈরি করা ছাড়া কোনও বিকল্প থাকবে না। যদি এটি মান দ্বারা পাস হয় তবে সংকলক একটি অনুলিপি এবং একটি চালনার মধ্যে সেরা পছন্দটি চয়ন করবে এবং এটি স্বয়ংক্রিয়ভাবে সম্পাদন করবে। সুতরাং, মান দ্বারা পাস।

ভাল যুক্তি. আমার অবশ্যই মনে রাখতে হবে যে " গতি চান? মূল্য দিয়ে পাস করুন " নিবন্ধটি আরও প্রায়ই।

অপেক্ষা করুন, যদি ফাংশনটি shared_ptrকোনও সদস্য ভেরিয়েবলের মধ্যে রাখে, উদাহরণস্বরূপ? এটি কি অপ্রয়োজনীয় অনুলিপি তৈরি করবে না?

ফাংশনটি কেবল shared_ptrযুক্তিটিকে তার স্টোরেজে স্থানান্তরিত করতে পারে। একটি মুভিং shared_ptrসস্তা কারণ এটি কোনও রেফারেন্স গুন পরিবর্তন করে না।

আহ, ভাল ধারণা।

তবে আমি একটি তৃতীয় দৃশ্যের কথা ভাবছি: আপনি যদি কারসাজি করতে না চান shared_ptr, না মালিকানা ভাগ করতে চান ?

সেক্ষেত্রে, shared_ptrসম্পূর্ণরূপে ফাংশন অপ্রাসঙ্গিক। আপনি যদি পয়েন্টটি হস্তান্তর করতে চান তবে একজন পয়েন্টি নিন এবং কলকারীরা তাদের মালিকানা কী শব্দার্থক চান তা বাছাই করুন।

এবং আমি রেফারেন্স দ্বারা বা মান দ্বারা পয়েন্টটি নেওয়া উচিত?

সাধারণ নিয়ম প্রযোজ্য। স্মার্ট পয়েন্টারগুলি কোনও কিছুই পরিবর্তন করে না।

আমি অনুলিপি করতে চাইলে মান দ্বারা পাস, আমি একটি অনুলিপি এড়াতে চাইলে রেফারেন্স দিয়ে পাস করুন

ঠিক।

হুঁ। আমার মনে হয় আপনি আর একটি দৃশ্য ভুলে গেছেন। আমি যদি মালিকানা ভাগ করতে চাই তবে কেবল একটি নির্দিষ্ট শর্তের উপর নির্ভর করে?

আহ, একটি আকর্ষণীয় প্রান্ত মামলা। আমি প্রায়শই এমনটি আশা করি না। তবে যখন এটি হয় আপনি হয় মান দ্বারা পাস করতে পারেন এবং অনুলিপিটি আপনার প্রয়োজন না হলে উপেক্ষা করতে পারেন, বা রেফারেন্স দিয়ে পাস করুন এবং আপনার প্রয়োজন হলে অনুলিপি তৈরি করতে পারেন।

আমি প্রথম অপশনটিতে একটি রিন্ডন্ড্যান্ট অনুলিপি ঝুঁকি নিয়েছি এবং দ্বিতীয়টিতে একটি সম্ভাব্য পদক্ষেপ হারিয়ে ফেলেছি। আমি কি কেক খেতে পারি না এবং তাও খেতে পারি?

যদি আপনি এমন পরিস্থিতিতে থাকেন যা সত্যই গুরুত্বপূর্ণ, আপনি দুটি ওভারলোড সরবরাহ করতে পারেন, একটি কনস্ট কনভার্ট রেভেলু রেফারেন্স এবং অন্যটি মূল্যের রেফারেন্স নিয়ে। একটি অনুলিপি, অন্য সরানো। একটি নিখুঁত-ফরোয়ার্ডিং ফাংশন টেম্পলেট অন্য বিকল্প another

আমি মনে করি এটি সম্ভাব্য সমস্ত পরিস্থিতিতে জুড়েছে। আপনাকে অনেক ধন্যবাদ.


4
@ জন: কিসের জন্য? আমার এ করা উচিত বা আমার বি করা উচিত, এগুলিই । আমি মনে করি আমরা সবাই মান / রেফারেন্স দিয়ে কীভাবে বস্তুগুলি পাস করতে জানি?
এসবিআই

9
কারণ গদ্য যেমন "এর অর্থ কি আমি এটি অনুলিপিটি তৈরি করার জন্য কোনও রেফারেন্স দিয়ে পাস করব? না, এটি হতাশাব্যঞ্জক" কোনও শিক্ষানবিশকে বিভ্রান্ত করছে। কনস্টের কাছে রেফারেন্স দিয়ে পাস করা কোনও অনুলিপি তৈরি করে না।
জন

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

@ অ্যাডম্যান আপনি যে উত্তরের সাথে লিঙ্ক করেছেন সেই পরিস্থিতিতে কোনও নিয়ম প্রযোজ্য নয়, সুতরাং এটি সম্পূর্ণ অপ্রাসঙ্গিক। দয়া করে আমাকে একটি এসএসসিসিই লিখুন যেখানে আপনি একটি shared_ptr<T> ptr;(যেমন void f(T&), সাথে ডাকা f(*ptr)) থেকে রেফারেন্স দিয়ে পাস করেন এবং অবজেক্টটি কলটি আউটলাইভ করে না। বিকল্প হিসাবে আপনি যেখানে মান void f(T)এবং সমস্যা হরতাল দিয়ে যান সেখানে একটি লিখুন ।
আর মার্টিনহো ফার্নান্দিস

@ মার্টিনহো সাধারণ স্ব-সংযুক্ত সঠিক উদাহরণের জন্য আমার উদাহরণ কোডটি দেখুন । উদাহরণটি void f(T&)থ্রেডগুলির জন্য এবং এর সাথে জড়িত। আমি মনে করি আমার সমস্যাটি হ'ল আপনার উত্তরের সুরটি ভাগ করা_প্ট্রির মালিকানাকে নিরুৎসাহিত করে যা এগুলি ব্যবহারের সবচেয়ে নিরাপদ, সবচেয়ে স্বজ্ঞাত এবং কমপক্ষে জটিল উপায়। আমি কোনও প্রারম্ভিককে একটি শেয়ারড_প্টারের <>> এর অপব্যবহারের সম্ভাবনাগুলি দুর্দান্ত এবং সুবিধাটি হ'ল ন্যূনতমর মালিকানাধীন ডেটাতে রেফারেন্স বের করার পরামর্শ দেওয়ার পক্ষে সর্বদা বিপক্ষে থাকব।
রেডম্যান

22

আমি মনে করি লোকেরা ফাংশন প্যারামিটার হিসাবে কাঁচা পয়েন্টার ব্যবহার করতে অকারণে ভয় পায়। যদি ফাংশনটি পয়েন্টারটি সঞ্চয় করতে বা অন্যথায় তার জীবনকালকে প্রভাবিত না করে, একটি কাঁচা পয়েন্টার ঠিক পাশাপাশি কাজ করে এবং সর্বনিম্ন সাধারণ ডিনোমিনেটরকে উপস্থাপন করে। উদাহরণস্বরূপ বিবেচনা করুন আপনি কীভাবে unique_ptrকোনও ফাংশনে একটি পাস করবেন যা shared_ptrএকটি পরামিতি হিসাবে গ্রহণ করবে , হয় মান দ্বারা বা কনস্ট্যান্ট রেফারেন্স দ্বারা?

void DoSomething(myClass * p);

DoSomething(myClass_shared_ptr.get());
DoSomething(myClass_unique_ptr.get());

ফাংশন প্যারামিটার হিসাবে একটি কাঁচা পয়েন্টার আপনাকে কলিং কোডে স্মার্ট পয়েন্টার ব্যবহার থেকে বিরত রাখে না, যেখানে এটি সত্যই গুরুত্বপূর্ণ।


8
আপনি যদি কোনও পয়েন্টার ব্যবহার করছেন তবে কেন কেবল একটি রেফারেন্স ব্যবহার করবেন না? DoSomething(*a_smart_ptr)
জিও

4
@ শিও, আপনি ঠিক বলেছেন - এটি আরও ভাল হবে। কখনও কখনও আপনাকে যদিও একটি NULL পয়েন্টার সম্ভাবনা জন্য অনুমতি প্রয়োজন।
মার্ক র্যানসোম

4
আউটপুট প্যারামিটার হিসাবে যদি আপনার কাঁচা পয়েন্টার ব্যবহার করার কোনও কনভেনশন থাকে তবে কলিং কোডটিতে কোনও ভেরিয়েবল পরিবর্তিত হতে পারে, তা চিহ্নিত করা সহজ eg যেমন: তুলনা fun(&x)করুন fun(x)। পরবর্তী উদাহরণে xহয় হয় মান দ্বারা বা একটি কনস্ট রেফ হিসাবে পাস করা যেতে পারে। এটি উপরে বর্ণিত হিসাবে আপনি nullptrযদি আউটপুটটিতে আগ্রহী না হন তবে আপনাকে পাশ করার অনুমতি দেবে ...
Andreas Magnusson

4
@ আন্ড্রেস ম্যাগনুসন: অন্য উত্স থেকে আগত পয়েন্টারগুলির সাথে কাজ করার সময় সেই পয়েন্টার-অ্যাস-আউটপুট-প্যারামিটার কনভেনশনটি সুরক্ষার ভ্রান্ত ধারণা দিতে পারে। কারণ সেক্ষেত্রে কলটি মজাদার (x) এবং * x পরিবর্তিত হয়েছে এবং উত্সটিতে আপনাকে সতর্ক করার জন্য কোনও & এক্স নেই।
ঝ্যান লিংস 23

যদি ফাংশন কল কলকারীর সুযোগকে ছাড়িয়ে যায়? একটি সম্ভাবনা রয়েছে যে ভাগ করা ptr এর ডেস্ট্রাক্টরকে ডেকে আনা হয়েছিল, এবং এখন ফাংশনটি মুছে ফেলা মেমরিটি অ্যাক্সেস করার চেষ্টা করবে, যার ফলশ্রুতি ইউবি
শ্রীধর থিয়াগারাজন

4

হ্যাঁ, একটি শেয়ার্ড_পিটার <> সম্পর্কে সম্পূর্ণ ধারণাটি হ'ল একাধিক উদাহরণ একই কাঁচা পয়েন্টার ধরে রাখতে পারে এবং যখন শেয়ার্ড_পিটার <> এর শেষ উদাহরণটি ধ্বংস হয়ে যায় কেবল তখন অন্তর্নিহিত মেমরিটি মুক্ত হয়।

আপনি এখনই কাঁচা_পয়েন্টারগুলি ব্যবহার করছেন বলে উদ্দেশ্য হারাতে পারলে আমি একটি ভাগ করা_প্ট্রে <> এর পয়েন্টার এড়াতে চাই।


2

আপনার প্রথম উদাহরণে বাই-মান দিয়ে যাওয়া নিরাপদ তবে এর থেকে আরও ভাল প্রতিমা রয়েছে। সম্ভব হলে কনফারেন্স রেফারেন্স দিয়ে পাস করুন - আমি স্মার্ট পয়েন্টারগুলির সাথে ডিল করার সময়ও হ্যাঁ বলব। আপনার দ্বিতীয় উদাহরণটি ঠিক ভাঙা নয় তবে এটি খুব !???। বোকা, কিছুই অর্জন না করে এবং স্মার্ট পয়েন্টারগুলির বিন্দুর অংশকে পরাভূত করে এবং যখন আপনি বিষয়গুলি অবলম্বন করতে এবং সংশোধন করার চেষ্টা করেন তখন আপনাকে ব্যথার এক কৌতুকময় জগতে ছেড়ে চলে যায়।


4
আপনি যদি কাঁচা পয়েন্টার বলতে চান তবে কেউ পয়েন্টার দিয়ে যাওয়ার পরামর্শ দিচ্ছে না। মালিকানা সংক্রান্ত কোনও বিতর্ক না থাকলে রেফারেন্স দিয়ে পাস করা অবশ্যই মূর্খবাদী। বিষয়টি, shared_ptr<>বিশেষত সম্পর্কিত, হ'ল প্রকৃতপক্ষে মালিকানা ভাগ করতে আপনার অবশ্যই একটি অনুলিপি তৈরি করতে হবে ; যদি আপনার কাছে যদি কোনও রেফারেন্স বা পয়েন্টার থাকে shared_ptr<>তবে আপনি কিছু ভাগ করছেন না এবং সাধারণ রেফারেন্স বা পয়েন্টার হিসাবে একই জীবনকাল সম্পর্কিত বিষয়গুলির সাথে জড়িত।
iljarn

4
@ এল্ডজার্ন: এক্ষেত্রে একটি ধ্রুবক রেফারেন্স দেওয়া ভাল। shared_ptrকলারের মূলটি ফাংশন কলকে ছাড়িয়ে যাওয়ার গ্যারান্টিযুক্ত, সুতরাং ফাংশনটি ব্যবহারে নিরাপদ shared_ptr<> const &। যদি পরবর্তী সময়ের জন্য পয়েন্টারটি সংরক্ষণ করার প্রয়োজন হয়, তবে এটি অনুলিপি করতে হবে (এই মুহুর্তে একটি রেফারেন্স ধরে রাখার পরিবর্তে একটি অনুলিপি তৈরি করতে হবে), তবে আপনার অনুলিপি করার প্রয়োজন না হলে অনুলিপি করার জন্য কোনও ব্যয় বহন করার দরকার নেই unless এটা। আমি এই ক্ষেত্রে একটি ধ্রুবক রেফারেন্স পাস করতে যাব ....
ডেভিড রদ্রিগেজ - ড্রিবিজ

4
@ ডেভিড: "এক্ষেত্রে একটি ধ্রুবক রেফারেন্স পাস করা ভাল। " কোনও বুদ্ধিমান এপিআই-তে নয় - কেন কোনও এপিআই একটি স্মার্ট পয়েন্টার টাইপের আদেশ দেয় যে এটি কেবল একটি সাধারণ কনফারেন্স রেফারেন্স না দিয়ে বরং সুবিধাও নেয় না? এটি কনস্ট-নির্ভুলতার অভাবের মতোই খারাপ। যদি আপনার বক্তব্যটি প্রযুক্তিগতভাবে এটি কোনওরকম ক্ষতি করে না তবে আমি অবশ্যই তাতে সম্মত হই, তবে আমার মনে হয় না এটি সঠিক জিনিস।
iljarn

4
... অন্যদিকে, যদি ফাংশনটির অবজেক্টটির আজীবন সময় বাড়ানোর প্রয়োজন না হয়, তবে আপনি কেবল shared_ptrইন্টারফেস থেকে অপসারণ করতে পারেন এবং constপয়েন্ট অবজেক্টের জন্য একটি সরল ( ) রেফারেন্সটি পাস করতে পারেন ।
ডেভিড রদ্রিগেজ - ড্রিবিস

4
@ ডেভিড: আপনার এপিআই গ্রাহক যদি shared_ptr<>শুরু করতে ব্যবহার না করেন তবে কী হবে ? এখন আপনার এপিআই হ'ল ঘাড়ের মধ্যে কেবল একটি ব্যথা, কারণ এটি কলারকে কেবলমাত্র এটির জন্য তাদের অবজেক্টের আজীবন শব্দার্থবিজ্ঞান পরিবর্তন করতে বাধ্য করে। "এটি প্রযুক্তিগতভাবে কোনও ক্ষতি করছে না" বলার অপেক্ষা রাখে না, সে ক্ষেত্রে আমরা সমর্থন করার মতো কিছুই দেখছি না। আমি যদি 'আপনার যদি ভাগাভাগির মালিকানা প্রয়োজন না হয় তবে ব্যবহার করবেন না' নিয়ে বিতর্কিত কিছু দেখছি না shared_ptr<>
iljarn

0

আপনার ফাংশনে DoSomething আপনি শ্রেণীর উদাহরণের ডেটা সদস্য পরিবর্তন করছেন myClass তাই আপনি যা পরিবর্তন করছেন তা হ'ল পরিচালিত (কাঁচা পয়েন্টার) অবজেক্টটি (শেয়ারড_পিটার) অবজেক্ট নয়। যার অর্থ এই ফাংশনটির রিটার্ন পয়েন্টে পরিচালিত কাঁচা পয়েন্টারের সাথে ভাগ করা সমস্ত পয়েন্টার তাদের ডেটা সদস্য দেখতে পাবেন: myClass::someFieldএকটি ভিন্ন মানতে পরিবর্তিত হয়েছে।

এই ক্ষেত্রে, আপনি কোনও গ্যারান্টি সহ কোনও ফাংশনটিতে যাচ্ছেন যে আপনি এটি সংশোধন করছেন না (শেয়ারড_পিটারের মালিকানাধীন বস্তু নয়)।

এটি প্রকাশ করার মত প্রতিমাটি হ'ল: একটি কনস্ট রেফ, যেমন

void DoSomething(const std::shared_ptr<myClass>& arg)

অনুরূপভাবে আপনি আপনার ফাংশনটির ব্যবহারকারীকে আশ্বাস দিচ্ছেন যে আপনি কাঁচা পয়েন্টারের মালিকদের তালিকায় অন্য কোনও মালিককে যুক্ত করছেন না। তবে, আপনি কাঁচা পয়েন্টার দ্বারা নির্দেশিত অন্তর্নিহিত অবজেক্টটি সংশোধন করার সম্ভাবনাটি রেখেছেন kept

কায়েট: যার অর্থ, যদি কোনওর মাধ্যমে shared_ptr::resetআপনি নিজের ফাংশনটি কল করার আগে কেউ কল করেন এবং এই মুহুর্তে এটি কাঁচা_সেপ্টারের মালিকানাধীন সর্বশেষ শেয়ার্ড_পিটার হয় তবে আপনার অবজেক্টটি ধ্বংস হয়ে যাবে, এবং আপনার ফাংশনটি ঝুঁকিপূর্ণ পয়েন্টারটিকে ধ্বংসকারী বস্তুতে চালিত করবে। খুব বিপজ্জনক !!!

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